await_all

(PHP 8.6+, True Async 1.0)

await_all() — Attend l’achèvement de toutes les tâches, en collectant les résultats et les erreurs séparément. Ne lève pas d’exception lorsque des tâches individuelles échouent.

Description

await_all(
    iterable $triggers,
    ?Async\Awaitable $cancellation = null,
    bool $preserveKeyOrder = true,
    bool $fillNull = false
): array

Paramètres

triggers Une collection itérable d’objets Async\Completable.

cancellation Un Awaitable optionnel pour annuler l’ensemble de l’attente.

preserveKeyOrder Si true (par défaut), les résultats sont dans l’ordre des clés du tableau d’entrée. Si false, dans l’ordre d’achèvement.

fillNull Si true, null est placé dans le tableau des résultats pour les tâches qui ont échoué. Si false (par défaut), les clés avec des erreurs sont omises.

Valeurs de retour

Un tableau de deux éléments : [$results, $errors]

Exemples

Exemple #1 Tolérance aux échecs partiels

<?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('Error'); }),
];

[$results, $errors] = await_all($coroutines);

// $results contient 'fast' et 'slow'
// $errors contient 'broken' => Exception
foreach ($errors as $key => $error) {
    echo "Task '$key' failed: {$error->getMessage()}\n";
}
?>

Exemple #2 Avec fillNull

<?php
[$results, $errors] = await_all($coroutines, fillNull: true);

// $results['broken'] === null (au lieu d'une clé manquante)
?>

Notes

Note : Le paramètre triggers accepte tout iterable, y compris les implémentations d’Iterator. Les coroutines peuvent être créées dynamiquement pendant l’itération. Voir l’exemple avec Iterator.

Voir aussi