await_any_of_or_fail

(PHP 8.6+, True Async 1.0)

await_any_of_or_fail() — Очікує успішного завершення перших N задач. Якщо одна з перших N завершується з помилкою, викидає виняток.

Опис

await_any_of_or_fail(
    int $count,
    iterable $triggers,
    ?Async\Awaitable $cancellation = null,
    bool $preserveKeyOrder = true
): array

Параметри

count Кількість успішних результатів, яких потрібно дочекатися. Якщо 0, повертає порожній масив.

triggers Ітерована колекція об’єктів Async\Completable.

cancellation Необов’язковий Awaitable для скасування очікування.

preserveKeyOrder Якщо true, ключі результатів відповідають ключам вхідного масиву. Якщо false — у порядку завершення.

Значення, що повертаються

Масив із $count успішних результатів.

Помилки/Винятки

Якщо задача завершується з помилкою до досягнення $count успіхів, виняток буде викинуто.

Приклади

Приклад #1 Отримання 2 з 5 результатів

<?php
use function Async\spawn;
use function Async\await_any_of_or_fail;

$coroutines = [];
for ($i = 0; $i < 5; $i++) {
    $coroutines[] = spawn(file_get_contents(...), "https://api/server-$i");
}

// Чекаємо будь-які 2 успішні відповіді
$results = await_any_of_or_fail(2, $coroutines);
echo count($results); // 2
?>

Примітки

Примітка: Параметр triggers приймає будь-який iterable, включаючи реалізації Iterator. Дивіться приклад з Iterator.

Дивіться також