Scope::awaitAfterCancellation
(PHP 8.6+, True Async 1.0)
public function awaitAfterCancellation(
?callable $errorHandler = null,
?Awaitable $cancellation = null
): void
Attend la fin de toutes les coroutines du scope, y compris les coroutines zombies. Nécessite un appel préalable à cancel(). Cette méthode est utilisée pour la terminaison gracieuse du scope lorsque vous devez attendre que toutes les coroutines (y compris les zombies) terminent leur travail.
Paramètres
errorHandler — une fonction de rappel pour la gestion des erreurs des coroutines zombies. Accepte un \Throwable en argument. Si null, les erreurs sont ignorées.
cancellation — un objet Awaitable pour interrompre l’attente. Si null, l’attente n’est pas limitée dans le temps.
Valeur de retour
Aucune valeur n’est retournée.
Exemples
Exemple #1 Terminaison gracieuse avec gestion des erreurs
<?php
use Async\Scope;
$scope = new Scope();
$scope->spawn(function() {
\Async\delay(1000);
echo "Task completed\n";
});
$scope->spawn(function() {
\Async\delay(5000);
throw new \RuntimeException("Background task error");
});
// D'abord, annuler
$scope->cancel();
// Puis attendre la fin de toutes les coroutines
$scope->awaitAfterCancellation(
errorHandler: function(\Throwable $e) {
error_log("Zombie error: " . $e->getMessage());
}
);
Exemple #2 Attente avec un délai d’expiration
<?php
use Async\Scope;
use function Async\timeout;
$scope = new Scope();
$scope->spawn(function() {
// Coroutine zombie qui met longtemps à se terminer
try {
\Async\delay(30_000);
} catch (\Async\CancelledException) {
// Nettoyage des ressources
\Async\delay(2000);
}
});
$scope->cancel();
$scope->awaitAfterCancellation(
errorHandler: function(\Throwable $e) {
error_log($e->getMessage());
},
cancellation: timeout(5000)
);
Voir aussi
- Scope::cancel — Annuler toutes les coroutines
- Scope::awaitCompletion — Attendre les coroutines actives
- Scope::dispose — Annuler et fermer le scope