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 – Скасувати корутину
- Cancellation – Концепція скасування