Scope::disposeAfterTimeout

(PHP 8.6+, True Async 1.0)

public function disposeAfterTimeout(int $timeout): void

Планирует закрытие scope через указанный таймаут. По истечении таймаута вызывается dispose(), отменяющий все корутины и закрывающий scope. Это удобно для установки максимального времени жизни scope.

Параметры

timeout — время в миллисекундах до автоматического закрытия scope.

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

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

Примеры

Пример #1 Ограничение времени выполнения

<?php

use Async\Scope;

$scope = new Scope();

// Scope будет закрыт через 10 секунд
$scope->disposeAfterTimeout(10_000);

$scope->spawn(function() {
    try {
        // Долгая операция
        \Async\delay(60_000);
    } catch (\Async\CancelledException) {
        echo "Задача отменена по таймауту scope\n";
    }
});

$scope->awaitCompletion();

Пример #2 Scope с ограниченным временем жизни

<?php

use Async\Scope;

$scope = new Scope();
$scope->disposeAfterTimeout(5000); // 5 секунд на всю работу

$scope->spawn(function() {
    \Async\delay(1000);
    echo "Задача 1: OK\n";
});

$scope->spawn(function() {
    \Async\delay(2000);
    echo "Задача 2: OK\n";
});

$scope->spawn(function() {
    \Async\delay(30_000); // Не успеет
    echo "Задача 3: OK\n"; // Не будет выведено
});

$scope->awaitCompletion();

См. также