Funktionsreferenzawait_any_of()

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 ​

php
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]

  • $results — Array der erfolgreichen Ergebnisse (bis zu $count Eintraege)
  • $errors — Array der Ausnahmen von fehlgeschlagenen Aufgaben

Beispiele ​

Beispiel #1 Quorum mit Fehlertoleranz ​

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

// 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 ​