TaskGroup::cancel

(PHP 8.6+, True Async 1.0)

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

Скасовує всі запущені корутини та задачі в черзі. Неявно викликає seal(). Задачі в черзі ніколи не запускаються.

Корутини отримують AsyncCancellation і завершуються. Скасування відбувається асинхронно — використовуйте awaitCompletion(), щоб гарантувати завершення.

Параметри

cancellation
Виняток, який є причиною скасування. Якщо null, використовується стандартний AsyncCancellation з повідомленням “TaskGroup cancelled”.

Приклади

Приклад #1 Скасування з очікуванням завершення

<?php

use Async\TaskGroup;

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

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

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

    echo "всі задачі скасовані\n";
});

Приклад #2 Скасування з причиною

<?php

use Async\TaskGroup;

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

    $group->cancel(new \Async\AsyncCancellation("Timeout exceeded"));
    $group->awaitCompletion();
});

Дивіться також