TaskGroup::cancel

(PHP 8.6+, True Async 1.0)

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

取消所有正在运行的协程和排队的任务。 隐式调用 seal()。排队的任务不会被启动。

协程接收到 AsyncCancellation 后终止。 取消是异步发生的 — 使用 awaitCompletion() 来保证完成。

参数

cancellation
作为取消原因的异常。如果为 null,则使用消息为 “TaskGroup cancelled” 的标准 AsyncCancellation

示例

示例 #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("超时已到"));
    $group->awaitCompletion();
});

参见