Scope::setExceptionHandler
(PHP 8.6+, True Async 1.0)
public function setExceptionHandler(callable $exceptionHandler): void
Setzt einen Exception-Handler fuer Exceptions, die in Kind-Koroutinen des Scopes geworfen werden. Wenn eine Koroutine mit einer unbehandelten Exception endet, wird anstelle einer Fehlerweiterleitung nach oben der angegebene Handler aufgerufen.
Parameter
exceptionHandler — die Exception-Behandlungsfunktion. Akzeptiert ein \Throwable als Argument.
Rueckgabewert
Es wird kein Wert zurueckgegeben.
Beispiele
Beispiel #1 Koroutinen-Fehler behandeln
<?php
use Async\Scope;
$scope = new Scope();
$scope->setExceptionHandler(function(\Throwable $e) {
error_log("Koroutinen-Fehler: " . $e->getMessage());
});
$scope->spawn(function() {
throw new \RuntimeException("Etwas ist schiefgelaufen");
});
$scope->awaitCompletion();
// Log enthaelt: "Koroutinen-Fehler: Etwas ist schiefgelaufen"
Beispiel #2 Zentralisierte Fehlerprotokollierung
<?php
use Async\Scope;
$scope = new Scope();
$errors = [];
$scope->setExceptionHandler(function(\Throwable $e) use (&$errors) {
$errors[] = $e;
});
$scope->spawn(function() {
throw new \RuntimeException("Fehler 1");
});
$scope->spawn(function() {
throw new \LogicException("Fehler 2");
});
$scope->awaitCompletion();
echo "Fehler insgesamt: " . count($errors) . "\n"; // Fehler insgesamt: 2
Siehe auch
- Scope::setChildScopeExceptionHandler — Exception-Handler fuer Kind-Scopes
- Scope::finally — Callback bei Scope-Abschluss