Scope::asNotSafely

(PHP 8.6+, True Async 1.0)

public function asNotSafely(): Scope

Помечает scope как “не безопасный”. При вызове disposeSafely() на таком scope корутины не становятся zombie, а получают сигнал отмены. Это полезно для фоновых задач, которые не нуждаются в гарантированном завершении.

Метод возвращает тот же объект scope, что позволяет использовать цепочку вызовов (fluent interface).

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

Scope — тот же объект scope (для цепочки вызовов).

Примеры

Пример #1 Scope для фоновых задач

<?php

use Async\Scope;

$scope = (new Scope())->asNotSafely();

$scope->spawn(function() {
    while (true) {
        // Фоновая задача: очистка кеша
        cleanExpiredCache();
        \Async\delay(60_000);
    }
});

// При disposeSafely() корутины получат отмену, а не станут zombie
$scope->disposeSafely();

Пример #2 Использование с inherit

<?php

use Async\Scope;

$parentScope = new Scope();
$bgScope = Scope::inherit($parentScope)->asNotSafely();

$bgScope->spawn(function() {
    echo "Фоновый процесс\n";
    \Async\delay(10_000);
});

// Закрытие: корутины будут отменены, а не zombie
$bgScope->disposeSafely();

См. также