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 "долгая задача";
});
$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();
});
См. также
- TaskGroup::seal — Запечатать без отмены
- TaskGroup::awaitCompletion — Дождаться завершения
- TaskGroup::dispose — Уничтожить scope группы