Coroutine::isCancelled
(PHP 8.6+, True Async 1.0)
public Coroutine::isCancelled(): bool
Проверяет, была ли корутина отменена и завершена. Возвращает true только когда отмена завершилась полностью.
Если корутина находится внутри protect(), isCancelled() вернёт false до тех пор, пока защищённая секция не завершится, даже если cancel() уже был вызван. Для проверки запроса на отмену используйте isCancellationRequested().
Возвращаемое значение
bool — true, если корутина была отменена и завершилась.
Примеры
Пример #1 Базовая отмена
<?php
use function Async\spawn;
use function Async\suspend;
$coroutine = spawn(function() {
Async\delay(10000);
});
suspend();
$coroutine->cancel();
suspend(); // даём отмене завершиться
var_dump($coroutine->isCancelled()); // bool(true)
var_dump($coroutine->isCompleted()); // bool(true)
Пример #2 Отложенная отмена с protect()
<?php
use function Async\spawn;
use function Async\suspend;
use function Async\protect;
$coroutine = spawn(function() {
protect(function() {
// Критическая секция — отмена отложена
Async\delay(100);
});
});
suspend();
$coroutine->cancel();
// Отмена запрошена, но ещё не завершена
var_dump($coroutine->isCancellationRequested()); // bool(true)
var_dump($coroutine->isCancelled()); // bool(false)
suspend(); // даём protect() завершиться
var_dump($coroutine->isCancelled()); // bool(true)
См. также
- Coroutine::isCancellationRequested — Проверить запрос на отмену
- Coroutine::cancel — Отменить корутину
- Отмена — Концепция отмены