Scope::setChildScopeExceptionHandler
(PHP 8.6+, True Async 1.0)
php
public function setChildScopeExceptionHandler(callable $exceptionHandler): voidDéfinit un gestionnaire d'exceptions pour les exceptions levées dans les scopes enfants. Lorsqu'un scope enfant se termine avec une erreur, ce gestionnaire est appelé, empêchant l'exception de se propager au scope parent.
Paramètres
exceptionHandler — la fonction de gestion des exceptions pour les scopes enfants. Accepte un \Throwable en argument.
Valeur de retour
Aucune valeur n'est retournée.
Exemples
Exemple #1 Capture des erreurs des scopes enfants
php
<?php
use Async\Scope;
$parentScope = new Scope();
$parentScope->setChildScopeExceptionHandler(function(\Throwable $e) {
error_log("Error in child scope: " . $e->getMessage());
});
$childScope = Scope::inherit($parentScope);
$childScope->spawn(function() {
throw new \RuntimeException("Child scope error");
});
$childScope->awaitCompletion(Async\timeout(5000));
// Erreur gérée, ne se propage pas à $parentScopeExemple #2 Isolation des erreurs entre modules
php
<?php
use Async\Scope;
$appScope = new Scope();
$appScope->setChildScopeExceptionHandler(function(\Throwable $e) {
error_log("[App] Module error: " . $e->getMessage());
});
// Chaque module dans son propre scope
$authScope = Scope::inherit($appScope);
$cacheScope = Scope::inherit($appScope);
$authScope->spawn(function() {
// Une erreur ici n'affectera pas $cacheScope
throw new \RuntimeException("Auth failed");
});
$cacheScope->spawn(function() {
echo "Cache is working fine\n";
});
$appScope->awaitCompletion(Async\timeout(5000));Voir aussi
- Scope::setExceptionHandler — Gestionnaire d'exceptions pour les coroutines
- Scope::inherit — Créer un scope enfant
- Scope::getChildScopes — Obtenir les scopes enfants