await_any_of

(PHP 8.6+, True Async 1.0)

await_any_of() — Wartet auf die ersten N abgeschlossenen Aufgaben und sammelt Ergebnisse und Fehler separat. Wirft keine Ausnahme, wenn einzelne Aufgaben fehlschlagen.

Beschreibung

await_any_of(
    int $count,
    iterable $triggers,
    ?Async\Awaitable $cancellation = null,
    bool $preserveKeyOrder = true,
    bool $fillNull = false
): array

Parameter

count Die Anzahl der erfolgreichen Ergebnisse, auf die gewartet werden soll.

triggers Eine iterierbare Sammlung von Async\Completable-Objekten.

cancellation Ein optionales Awaitable zum Abbrechen des Wartens.

preserveKeyOrder Wenn true, entsprechen die Ergebnisschluessel den Schluesseln des Eingabearrays.

fillNull Wenn true, wird null im Ergebnisarray fuer fehlgeschlagene Aufgaben eingesetzt.

Rueckgabewerte

Ein Array mit zwei Elementen: [$results, $errors]

Beispiele

Beispiel #1 Quorum mit Fehlertoleranz

<?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");
}

// Auf Quorum warten: 3 von 5 Antworten
[$results, $errors] = await_any_of(3, $coroutines);

if (count($results) >= 3) {
    echo "Quorum erreicht\n";
} else {
    echo "Quorum nicht erreicht, Fehler: " . count($errors) . "\n";
}
?>

Hinweise

Hinweis: Der Parameter triggers akzeptiert jedes iterable, einschliesslich Iterator-Implementierungen. Siehe das Iterator-Beispiel.

Siehe auch