Scope::disposeSafely

(PHP 8.6+, True Async 1.0)

public function disposeSafely(): void

Безопасно закрывает scope. Активные корутины не отменяются, а становятся zombie-корутинами: они продолжают работать, но scope считается закрытым. Zombie-корутины завершатся самостоятельно, когда закончат свою работу.

Если scope помечен как “не безопасный” через asNotSafely(), корутины будут отменены вместо превращения в zombie.

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

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

Примеры

Пример #1 Базовое использование

<?php

use Async\Scope;

$scope = new Scope();

$scope->spawn(function() {
    \Async\delay(5000);
    echo "Задача завершена как zombie\n";
});

// Scope закрывается, но корутина продолжает работать
$scope->disposeSafely();

var_dump($scope->isClosed()); // bool(true)
// Корутина продолжает выполняться в фоне

Пример #2 Корректное завершение с ожиданием zombie

<?php

use Async\Scope;

$scope = new Scope();

$scope->spawn(function() {
    \Async\delay(2000);
    echo "Фоновая задача завершена\n";
});

$scope->disposeSafely();

// Ожидаем завершения zombie-корутин
$scope->awaitAfterCancellation(
    errorHandler: function(\Throwable $e) {
        error_log("Ошибка zombie: " . $e->getMessage());
    }
);

См. также