TaskGroup::all
(PHP 8.6+, True Async 1.0)
public TaskGroup::all(bool $ignoreErrors = false): Async\FutureRetourne un Future qui se resout avec un tableau de resultats lorsque toutes les taches sont terminees. Les cles du tableau correspondent aux cles attribuees via spawn() / spawnWithKey().
Si les taches sont deja terminees, le Future se resout immediatement.
Le Future retourne supporte un jeton d'annulation via await(?Completable $cancellation), ce qui permet de definir un delai d'attente ou une autre strategie d'annulation.
Parametres
ignoreErrors : Si false (par defaut) et qu'il y a des erreurs, le Future est rejete avec CompositeException. Si true, les erreurs sont ignorees et le Future se resout avec uniquement les resultats reussis. Les erreurs peuvent etre recuperees via getErrors().
Valeur de retour
Async\Future --- un resultat futur contenant le tableau des resultats des taches. Appelez ->await() pour obtenir la valeur.
Erreurs
Le Future est rejete avec Async\CompositeException si $ignoreErrors = false et qu'au moins une tache a echoue avec une erreur.
Exemples
Exemple #1 Utilisation de 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)
});Exemple #2 Gestion des erreurs
<?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"
}
}
});Exemple #3 Ignorer les erreurs
<?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
});Exemple #4 Attente avec un delai d'expiration
<?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 "Impossible d'obtenir les donnees en 5 secondes\n";
}
});Voir aussi
- TaskGroup::awaitCompletion --- Attendre la fin sans exceptions
- TaskGroup::getResults --- Obtenir les resultats sans attente
- TaskGroup::getErrors --- Obtenir les erreurs