await_any_of
(PHP 8.6+, True Async 1.0)
await_any_of() — Attende i primi N task completati, raccogliendo risultati ed errori separatamente. Non lancia un’eccezione quando singoli task falliscono.
Descrizione
await_any_of(
int $count,
iterable $triggers,
?Async\Awaitable $cancellation = null,
bool $preserveKeyOrder = true,
bool $fillNull = false
): array
Parametri
count
Il numero di risultati riusciti da attendere.
triggers
Una collezione iterabile di oggetti Async\Completable.
cancellation
Un Awaitable opzionale per annullare l’attesa.
preserveKeyOrder
Se true, le chiavi dei risultati corrispondono alle chiavi dell’array di input.
fillNull
Se true, null viene inserito nell’array dei risultati per i task falliti.
Valori di ritorno
Un array di due elementi: [$results, $errors]
$results— array dei risultati riusciti (fino a$countelementi)$errors— array delle eccezioni dai task falliti
Esempi
Esempio #1 Quorum con tolleranza agli errori
<?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");
}
// Attendi il quorum: 3 risposte su 5
[$results, $errors] = await_any_of(3, $coroutines);
if (count($results) >= 3) {
echo "Quorum raggiunto\n";
} else {
echo "Quorum non raggiunto, errori: " . count($errors) . "\n";
}
?>
Note
Nota: Il parametro
triggersaccetta qualsiasiiterable, incluse le implementazioni diIterator. Vedi l’esempio con Iterator.
Vedi anche
- await_any_of_or_fail() — primi N, errore interrompe
- await_all() — tutti i task con tolleranza agli errori