TaskGroup::cancel
(PHP 8.6+, True Async 1.0)
public TaskGroup::cancel(?Async\AsyncCancellation $cancellation = null): void
실행 중인 모든 코루틴과 대기열의 태스크를 취소합니다.
암묵적으로 seal()을 호출합니다. 대기열의 태스크는 시작되지 않습니다.
코루틴은 AsyncCancellation을 수신하고 종료됩니다.
취소는 비동기적으로 수행됩니다 — 완료를 보장하려면 awaitCompletion()을 사용하세요.
매개변수
- cancellation
- 취소 이유로 사용되는 예외입니다.
null이면 “TaskGroup cancelled” 메시지가 포함된 표준AsyncCancellation이 사용됩니다.
예제
예제 #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("타임아웃 초과"));
$group->awaitCompletion();
});
참고
- TaskGroup::seal — 취소 없이 봉인
- TaskGroup::awaitCompletion — 완료 대기
- TaskGroup::dispose — 그룹 스코프 해제