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();
См. также
- Scope::disposeSafely — Безопасное закрытие scope
- Scope::dispose — Принудительное закрытие scope
- Scope::cancel — Отмена всех корутин