await_any_of
(PHP 8.6+, True Async 1.0)
await_any_of() — Espera a que se completen las primeras N tareas, recopilando resultados y errores por separado. No lanza una excepción cuando tareas individuales fallan.
Descripción
await_any_of(
int $count,
iterable $triggers,
?Async\Awaitable $cancellation = null,
bool $preserveKeyOrder = true,
bool $fillNull = false
): array
Parámetros
count
El número de resultados exitosos que se esperan.
triggers
Una colección iterable de objetos Async\Completable.
cancellation
Un Awaitable opcional para cancelar la espera.
preserveKeyOrder
Si es true, las claves de los resultados corresponden a las claves del array de entrada.
fillNull
Si es true, se coloca null en el array de resultados para las tareas que fallaron.
Valores de retorno
Un array de dos elementos: [$results, $errors]
$results— array de resultados exitosos (hasta$countelementos)$errors— array de excepciones de las tareas que fallaron
Ejemplos
Ejemplo #1 Quórum con tolerancia a errores
<?php
use function Async\spawn;
use function Async\await_any_of;
$nodes = ['node1', 'node2', 'node3', 'node4', 'node5'];
$coroutines = [];
foreach ($nodes as $node) {
$coroutines[$node] = spawn(file_get_contents(...), "https://$node/vote");
}
// Esperar quórum: 3 de 5 respuestas
[$results, $errors] = await_any_of(3, $coroutines);
if (count($results) >= 3) {
echo "Quórum alcanzado\n";
} else {
echo "Quórum no alcanzado, errores: " . count($errors) . "\n";
}
?>
Notas
Nota: El parámetro
triggersacepta cualquieriterable, incluyendo implementaciones deIterator. Consulte el ejemplo con Iterator.
Ver también
- await_any_of_or_fail() — primeras N, error aborta
- await_all() — todas las tareas con tolerancia a errores