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());
}
);
См. также
- Scope::dispose — Принудительное закрытие scope
- Scope::asNotSafely — Отключить zombie-поведение
- Scope::awaitAfterCancellation — Ожидание zombie-корутин