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
Iterable коллекция объектов 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('Ошибка'); }),
];
[$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() — первый результат