Coroutine::isCancelled

(PHP 8.6+, True Async 1.0)

public Coroutine::isCancelled(): bool

Verifica si la coroutine ha sido cancelada y completada. Devuelve true solo cuando la cancelación ha finalizado completamente.

Si la coroutine está dentro de protect(), isCancelled() devolverá false hasta que la sección protegida se complete, incluso si ya se ha llamado a cancel(). Para verificar una solicitud de cancelación, use isCancellationRequested().

Valor de retorno

booltrue si la coroutine ha sido cancelada y completada.

Ejemplos

Ejemplo #1 Cancelación básica

<?php

use function Async\spawn;
use function Async\suspend;

$coroutine = spawn(function() {
    Async\delay(10000);
});

suspend();

$coroutine->cancel();

suspend(); // dejar que la cancelación se complete

var_dump($coroutine->isCancelled()); // bool(true)
var_dump($coroutine->isCompleted()); // bool(true)

Ejemplo #2 Cancelación diferida con protect()

<?php

use function Async\spawn;
use function Async\suspend;
use function Async\protect;

$coroutine = spawn(function() {
    protect(function() {
        // Sección crítica -- la cancelación se aplaza
        Async\delay(100);
    });
});

suspend();

$coroutine->cancel();

// Cancelación solicitada pero aún no completada
var_dump($coroutine->isCancellationRequested()); // bool(true)
var_dump($coroutine->isCancelled());             // bool(false)

suspend(); // dejar que protect() complete

var_dump($coroutine->isCancelled());             // bool(true)

Ver también