TaskGroup::all
(PHP 8.6+, True Async 1.0)
public TaskGroup::all(bool $ignoreErrors = false): Async\Future
Restituisce un Future che si risolve con un array di risultati quando tutti i task sono completati.
Le chiavi dell’array corrispondono a quelle assegnate tramite spawn() / spawnWithKey().
Se i task sono già completati, il Future si risolve immediatamente.
Il Future restituito supporta un token di cancellazione tramite await(?Completable $cancellation),
permettendo di impostare un timeout o un’altra strategia di cancellazione.
Parametri
- ignoreErrors
- Se
false(predefinito) e ci sono errori, ilFutureviene rifiutato conCompositeException. Setrue, gli errori vengono ignorati e ilFuturesi risolve solo con i risultati riusciti. Gli errori possono essere recuperati tramitegetErrors().
Valore di ritorno
Async\Future — un risultato futuro contenente l’array dei risultati dei task.
Chiama ->await() per ottenere il valore.
Errori
Il Future viene rifiutato con Async\CompositeException se $ignoreErrors = false e almeno un task è fallito con un errore.
Esempi
Esempio #1 Utilizzo base
<?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)
});
Esempio #2 Gestione degli errori
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => "ok");
$group->spawn(fn() => throw new \RuntimeException("fail"));
$group->seal();
try {
$group->all()->await();
} catch (\Async\CompositeException $e) {
foreach ($e->getExceptions() as $ex) {
echo $ex->getMessage() . "\n"; // "fail"
}
}
});
Esempio #3 Ignorare gli errori
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => "ok");
$group->spawn(fn() => throw new \RuntimeException("fail"));
$group->seal();
$results = $group->all(ignoreErrors: true)->await();
echo count($results) . "\n"; // 1
$errors = $group->getErrors();
echo count($errors) . "\n"; // 1
});
Esempio #4 Attesa con 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 "Impossibile ottenere i dati entro 5 secondi\n";
}
});
Vedi anche
- TaskGroup::awaitCompletion — Attende il completamento senza eccezioni
- TaskGroup::getResults — Ottiene i risultati senza attendere
- TaskGroup::getErrors — Ottiene gli errori