Scope::setExceptionHandler

(PHP 8.6+, True Async 1.0)

public function setExceptionHandler(callable $exceptionHandler): void

Устанавливает обработчик исключений, возникающих в дочерних корутинах scope. Когда корутина завершается с необработанным исключением, вместо всплытия ошибки вызывается указанный обработчик.

Параметры

exceptionHandler — функция обработки исключений. Принимает \Throwable как аргумент.

Возвращаемое значение

Функция не возвращает значения.

Примеры

Пример #1 Обработка ошибок корутин

<?php

use Async\Scope;

$scope = new Scope();

$scope->setExceptionHandler(function(\Throwable $e) {
    error_log("Ошибка в корутине: " . $e->getMessage());
});

$scope->spawn(function() {
    throw new \RuntimeException("Что-то пошло не так");
});

$scope->awaitCompletion();
// В лог будет записано: "Ошибка в корутине: Что-то пошло не так"

Пример #2 Централизованное логирование ошибок

<?php

use Async\Scope;

$scope = new Scope();
$errors = [];

$scope->setExceptionHandler(function(\Throwable $e) use (&$errors) {
    $errors[] = $e;
});

$scope->spawn(function() {
    throw new \RuntimeException("Ошибка 1");
});

$scope->spawn(function() {
    throw new \LogicException("Ошибка 2");
});

$scope->awaitCompletion();

echo "Всего ошибок: " . count($errors) . "\n"; // Всего ошибок: 2

См. также