Riferimento funzioniawait_any_of()

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 ​

php
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 $count elementi)
  • $errors — array delle eccezioni dai task falliti

Esempi ​

Esempio #1 Quorum con tolleranza agli errori ​

php
<?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 triggers accetta qualsiasi iterable, incluse le implementazioni di Iterator. Vedi l'esempio con Iterator.

Vedi anche ​