await_all
(PHP 8.6+, True Async 1.0)
await_all() — Espera a que todas las tareas se completen, recopilando resultados y errores por separado. No lanza una excepción cuando tareas individuales fallan.
Descripción
await_all(
iterable $triggers,
?Async\Awaitable $cancellation = null,
bool $preserveKeyOrder = true,
bool $fillNull = false
): array
Parámetros
triggers
Una colección iterable de objetos Async\Completable.
cancellation
Un Awaitable opcional para cancelar toda la espera.
preserveKeyOrder
Si es true (por defecto), los resultados están en el orden de claves del array de entrada. Si es false, en orden de finalización.
fillNull
Si es true, se coloca null en el array de resultados para las tareas que fallaron. Si es false (por defecto), las claves con errores se omiten.
Valores de retorno
Un array de dos elementos: [$results, $errors]
$results— array de resultados exitosos$errors— array de excepciones (las claves corresponden a las claves de las tareas de entrada)
Ejemplos
Ejemplo #1 Tolerancia a fallos parciales
<?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 contiene 'fast' y 'slow'
// $errors contiene 'broken' => Exception
foreach ($errors as $key => $error) {
echo "La tarea '$key' falló: {$error->getMessage()}\n";
}
?>
Ejemplo #2 Con fillNull
<?php
[$results, $errors] = await_all($coroutines, fillNull: true);
// $results['broken'] === null (en lugar de una clave ausente)
?>
Notas
Nota: El parámetro
triggersacepta cualquieriterable, incluyendo implementaciones deIterator. Las corrutinas pueden crearse dinámicamente durante la iteración. Consulte el ejemplo con Iterator.
Ver también
- await_all_or_fail() — todas las tareas, error aborta
- await_any_or_fail() — primer resultado