Coroutine::getException

(PHP 8.6+, True Async 1.0)

public Coroutine::getException(): mixed

Повертає виняток, що виник у корутині. Якщо корутина завершилася успішно або ще не завершилася, повертає null. Якщо корутину було скасовано, повертає об’єкт AsyncCancellation.

Значення, що повертається

mixed – виняток або null.

Помилки

Викидає RuntimeException, якщо корутина наразі виконується.

Приклади

Приклад #1 Успішне завершення

<?php

use function Async\spawn;
use function Async\await;

$coroutine = spawn(function() {
    return "success";
});

await($coroutine);
var_dump($coroutine->getException()); // NULL

Приклад #2 Завершення з помилкою

<?php

use function Async\spawn;
use function Async\await;

$coroutine = spawn(function() {
    throw new RuntimeException("test error");
});

try {
    await($coroutine);
} catch (RuntimeException $e) {
    // Перехоплено під час await
}

$exception = $coroutine->getException();
var_dump($exception instanceof RuntimeException); // bool(true)
var_dump($exception->getMessage());                // string(10) "test error"

Приклад #3 Скасована корутина

<?php

use function Async\spawn;
use function Async\suspend;

$coroutine = spawn(function() {
    Async\delay(10000);
});

suspend();
$coroutine->cancel();
suspend();

$exception = $coroutine->getException();
var_dump($exception instanceof \Async\AsyncCancellation); // bool(true)

Дивіться також