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