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