await_all
(PHP 8.6+, True Async 1.0)
await_all() — Wartet auf den Abschluss aller Aufgaben und sammelt Ergebnisse und Fehler separat. Wirft keine Ausnahme, wenn einzelne Aufgaben fehlschlagen.
Beschreibung
await_all(
iterable $triggers,
?Async\Awaitable $cancellation = null,
bool $preserveKeyOrder = true,
bool $fillNull = false
): arrayParameter
triggers Eine iterierbare Sammlung von Async\Completable-Objekten.
cancellation Ein optionales Awaitable zum Abbrechen des gesamten Wartens.
preserveKeyOrder Wenn true (Standard), werden die Ergebnisse in der Schluesselreihenfolge des Eingabearrays zurueckgegeben. Wenn false, in Abschlussreihenfolge.
fillNull Wenn true, wird null im Ergebnisarray fuer fehlgeschlagene Aufgaben eingesetzt. Wenn false (Standard), werden Schluessel mit Fehlern ausgelassen.
Rueckgabewerte
Ein Array mit zwei Elementen: [$results, $errors]
$results— Array der erfolgreichen Ergebnisse$errors— Array der Ausnahmen (Schluessel entsprechen den Schluessel der Eingabeaufgaben)
Beispiele
Beispiel #1 Toleranz gegenueber teilweisen Fehlern
<?php
use function Async\spawn;
use function Async\await_all;
$coroutines = [
'fast' => spawn(file_get_contents(...), 'https://api/fast'),
'slow' => spawn(file_get_contents(...), 'https://api/slow'),
'broken' => spawn(function() { throw new \Exception('Fehler'); }),
];
[$results, $errors] = await_all($coroutines);
// $results enthaelt 'fast' und 'slow'
// $errors enthaelt 'broken' => Exception
foreach ($errors as $key => $error) {
echo "Aufgabe '$key' fehlgeschlagen: {$error->getMessage()}\n";
}
?>Beispiel #2 Mit fillNull
<?php
[$results, $errors] = await_all($coroutines, fillNull: true);
// $results['broken'] === null (anstelle eines fehlenden Schluessels)
?>Hinweise
Hinweis: Der Parameter
triggersakzeptiert jedesiterable, einschliesslichIterator-Implementierungen. Coroutinen koennen waehrend der Iteration dynamisch erstellt werden. Siehe das Iterator-Beispiel.
Siehe auch
- await_all_or_fail() — alle Aufgaben, Fehler bricht ab
- await_any_or_fail() — erstes Ergebnis