await_all
(PHP 8.6+, True Async 1.0)
await_all() — Очікує завершення всіх задач, збираючи результати та помилки окремо. Не викидає виняток при помилці окремих задач.
Опис
await_all(
iterable $triggers,
?Async\Awaitable $cancellation = null,
bool $preserveKeyOrder = true,
bool $fillNull = false
): array
Параметри
triggers
Ітерована колекція об’єктів Async\Completable.
cancellation
Необов’язковий Awaitable для скасування всього очікування.
preserveKeyOrder
Якщо true (за замовчуванням), результати розташовані у порядку ключів вхідного масиву. Якщо false — у порядку завершення.
fillNull
Якщо true, null підставляється в масив результатів для задач, що завершилися з помилкою. Якщо false (за замовчуванням), ключі з помилками пропускаються.
Значення, що повертаються
Масив із двох елементів: [$results, $errors]
$results— масив успішних результатів$errors— масив винятків (ключі відповідають ключам вхідних задач)
Приклади
Приклад #1 Толерантність до часткових помилок
<?php
use function Async\spawn;
use function Async\await_all;
$coroutines = [
'fast' => spawn(file_get_contents(...), 'https://api/fast'),
'slow' => spawn(file_get_contents(...), 'https://api/slow'),
'broken' => spawn(function() { throw new \Exception('Error'); }),
];
[$results, $errors] = await_all($coroutines);
// $results містить 'fast' та 'slow'
// $errors містить 'broken' => Exception
foreach ($errors as $key => $error) {
echo "Задача '$key' не вдалася: {$error->getMessage()}\n";
}
?>
Приклад #2 З fillNull
<?php
[$results, $errors] = await_all($coroutines, fillNull: true);
// $results['broken'] === null (замість відсутнього ключа)
?>
Примітки
Примітка: Параметр
triggersприймає будь-якийiterable, включаючи реалізаціїIterator. Корутини можна створювати динамічно під час ітерації. Дивіться приклад з Iterator.
Дивіться також
- await_all_or_fail() — усі задачі, помилка перериває виконання
- await_any_or_fail() — перший результат