Scope::disposeSafely
(PHP 8.6+, True Async 1.0)
public function disposeSafely(): void
Безпечно закриває область видимості. Активні корутини не скасовуються, а натомість стають зомбі-корутинами: вони продовжують виконуватися, але область видимості вважається закритою. Зомбі-корутини завершаться самостійно, коли закінчать свою роботу.
Якщо область видимості позначена як “небезпечна” через asNotSafely(), корутини будуть скасовані замість того, щоб стати зомбі.
Значення, що повертається
Значення не повертається.
Приклади
Приклад #1 Базове використання
<?php
use Async\Scope;
$scope = new Scope();
$scope->spawn(function() {
\Async\delay(5000);
echo "Task completed as a zombie\n";
});
// Scope is closed, but the coroutine continues running
$scope->disposeSafely();
var_dump($scope->isClosed()); // bool(true)
// Coroutine continues executing in the background
Приклад #2 Коректне завершення з очікуванням зомбі
<?php
use Async\Scope;
$scope = new Scope();
$scope->spawn(function() {
\Async\delay(2000);
echo "Background task completed\n";
});
$scope->disposeSafely();
// Wait for zombie coroutines to finish
$scope->awaitAfterCancellation(
errorHandler: function(\Throwable $e) {
error_log("Zombie error: " . $e->getMessage());
}
);
Дивіться також
- Scope::dispose — Примусове закриття області видимості
- Scope::asNotSafely — Вимкнення поведінки зомбі
- Scope::awaitAfterCancellation — Очікування зомбі-корутин