TaskGroup::all
(PHP 8.6+, True Async 1.0)
public TaskGroup::all(bool $ignoreErrors = false): Async\Future
Gibt ein Future zurueck, das mit einem Array von Ergebnissen aufgeloest wird, wenn alle Aufgaben abgeschlossen sind.
Die Array-Schluessel entsprechen den ueber spawn() / spawnWithKey() zugewiesenen Schluesseln.
Wenn die Aufgaben bereits abgeschlossen sind, wird das Future sofort aufgeloest.
Das zurueckgegebene Future unterstuetzt ein Abbruch-Token ueber await(?Completable $cancellation),
sodass Sie ein Timeout oder eine andere Abbruchstrategie festlegen koennen.
Parameter
- ignoreErrors
- Wenn
false(Standard) und Fehler vorhanden sind, wird dasFuturemitCompositeExceptionabgelehnt. Wenntrue, werden Fehler ignoriert und dasFuturewird nur mit erfolgreichen Ergebnissen aufgeloest. Fehler koennen uebergetErrors()abgerufen werden.
Rueckgabewert
Async\Future — ein zukuenftiges Ergebnis, das das Array der Aufgabenergebnisse enthaelt.
Rufen Sie ->await() auf, um den Wert zu erhalten.
Fehler
Das Future wird mit Async\CompositeException abgelehnt, wenn $ignoreErrors = false und mindestens eine Aufgabe mit einem Fehler fehlgeschlagen ist.
Beispiele
Beispiel #1 Grundlegende Verwendung
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawnWithKey('a', fn() => 10);
$group->spawnWithKey('b', fn() => 20);
$group->spawnWithKey('c', fn() => 30);
$group->seal();
$results = $group->all()->await();
var_dump($results['a']); // int(10)
var_dump($results['b']); // int(20)
var_dump($results['c']); // int(30)
});
Beispiel #2 Fehlerbehandlung
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => "ok");
$group->spawn(fn() => throw new \RuntimeException("fehlgeschlagen"));
$group->seal();
try {
$group->all()->await();
} catch (\Async\CompositeException $e) {
foreach ($e->getExceptions() as $ex) {
echo $ex->getMessage() . "\n"; // "fehlgeschlagen"
}
}
});
Beispiel #3 Fehler ignorieren
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => "ok");
$group->spawn(fn() => throw new \RuntimeException("fehlgeschlagen"));
$group->seal();
$results = $group->all(ignoreErrors: true)->await();
echo count($results) . "\n"; // 1
$errors = $group->getErrors();
echo count($errors) . "\n"; // 1
});
Beispiel #4 Warten mit Timeout
<?php
use Async\TaskGroup;
use function Async\delay;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => slowApi()->fetchReport());
$group->spawn(fn() => anotherApi()->fetchStats());
$group->seal();
$timeout = Async\timeout(5.0);
try {
$results = $group->all()->await($timeout);
} catch (Async\TimeoutException) {
echo "Daten konnten nicht innerhalb von 5 Sekunden abgerufen werden\n";
}
});
Siehe auch
- TaskGroup::awaitCompletion — Auf Abschluss ohne Ausnahmen warten
- TaskGroup::getResults — Ergebnisse ohne Warten abrufen
- TaskGroup::getErrors — Fehler abrufen