TaskGroup::cancel

(PHP 8.6+, True Async 1.0)

public TaskGroup::cancel(?Async\AsyncCancellation $cancellation = null): void

Cancela todas las corrutinas en ejecución y las tareas en cola. Llama implícitamente a seal(). Las tareas en cola nunca se inician.

Las corrutinas reciben una AsyncCancellation y terminan. La cancelación ocurre de forma asíncrona — use awaitCompletion() para garantizar la finalización.

Parámetros

cancellation
La excepción que sirve como razón de cancelación. Si es null, se usa una AsyncCancellation estándar con el mensaje “TaskGroup cancelled”.

Ejemplos

Ejemplo #1 Cancelación con espera de finalización

<?php

use Async\TaskGroup;

spawn(function() {
    $group = new TaskGroup();

    $group->spawn(function() {
        Async\delay(10000);
        return "tarea larga";
    });

    $group->cancel();
    $group->awaitCompletion();

    echo "todas las tareas canceladas\n";
});

Ejemplo #2 Cancelación con un motivo

<?php

use Async\TaskGroup;

spawn(function() {
    $group = new TaskGroup();
    $group->spawn(fn() => Async\delay(10000));

    $group->cancel(new \Async\AsyncCancellation("Tiempo de espera excedido"));
    $group->awaitCompletion();
});

Ver también