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]

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 triggers acepta cualquier iterable, incluyendo implementaciones de Iterator. Las corrutinas pueden crearse dinámicamente durante la iteración. Consulte el ejemplo con Iterator.

Ver también