TaskGroup::cancel
(PHP 8.6+, True Async 1.0)
php
public TaskGroup::cancel(?Async\AsyncCancellation $cancellation = null): voidСкасовує всі запущені корутини та задачі в черзі. Неявно викликає seal(). Задачі в черзі ніколи не запускаються.
Корутини отримують AsyncCancellation і завершуються. Скасування відбувається асинхронно --- використовуйте awaitCompletion(), щоб гарантувати завершення.
Параметри
cancellation : Виняток, який є причиною скасування. Якщо null, використовується стандартний AsyncCancellation з повідомленням "TaskGroup cancelled".
Приклади
Приклад #1 Скасування з очікуванням завершення
php
<?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
<?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 --- Вивільнити область видимості групи