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());
    }
);

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