TaskGroup::cancel
(PHP 8.6+, True Async 1.0)
public TaskGroup::cancel(?Async\AsyncCancellation $cancellation = null): void
Cancella tutte le coroutine in esecuzione e i task in coda.
Chiama implicitamente seal(). I task in coda non vengono mai avviati.
Le coroutine ricevono un AsyncCancellation e terminano.
La cancellazione avviene in modo asincrono — usa awaitCompletion() per garantire il completamento.
Parametri
- cancellation
- L’eccezione che funge da motivo della cancellazione. Se
null, viene utilizzato unAsyncCancellationstandard con il messaggio “TaskGroup cancelled”.
Esempi
Esempio #1 Cancellazione con attesa del completamento
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(function() {
Async\delay(10000);
return "long task";
});
$group->cancel();
$group->awaitCompletion();
echo "tutti i task cancellati\n";
});
Esempio #2 Cancellazione con motivazione
<?php
use Async\TaskGroup;
spawn(function() {
$group = new TaskGroup();
$group->spawn(fn() => Async\delay(10000));
$group->cancel(new \Async\AsyncCancellation("Timeout superato"));
$group->awaitCompletion();
});
Vedi anche
- TaskGroup::seal — Sigilla senza cancellazione
- TaskGroup::awaitCompletion — Attende il completamento
- TaskGroup::dispose — Elimina lo scope del gruppo