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]

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

Vedi anche