TaskGroup::cancel

(PHP 8.6+, True Async 1.0)

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

Bricht alle laufenden Coroutinen und Aufgaben in der Warteschlange ab. Ruft implizit seal() auf. Aufgaben in der Warteschlange werden nie gestartet.

Coroutinen erhalten eine AsyncCancellation und werden beendet. Der Abbruch erfolgt asynchron — verwenden Sie awaitCompletion(), um den Abschluss zu garantieren.

Parameter

cancellation
Die Ausnahme, die als Abbruchgrund dient. Wenn null, wird eine Standard-AsyncCancellation mit der Nachricht “TaskGroup cancelled” verwendet.

Beispiele

Beispiel #1 Abbruch mit Warten auf Abschluss

<?php

use Async\TaskGroup;

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

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

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

    echo "Alle Aufgaben abgebrochen\n";
});

Beispiel #2 Abbruch mit Begruendung

<?php

use Async\TaskGroup;

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

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

Siehe auch