TaskGroup::awaitCompletion

(PHP 8.6+, True Async 1.0)

public TaskGroup::awaitCompletion(): void

그룹의 모든 태스크가 완전히 완료될 때까지 대기합니다. all()과 달리 결과를 반환하지 않으며 태스크 오류에 대한 예외를 발생시키지 않습니다.

이 메서드를 호출하기 전에 그룹이 봉인되어야 합니다.

일반적인 사용 사례는 cancel() 후 코루틴이 실제로 완료될 때까지 대기하는 것입니다. cancel() 메서드는 취소를 시작하지만 코루틴이 비동기적으로 완료될 수 있습니다. awaitCompletion()은 모든 코루틴이 중지되었음을 보장합니다.

오류

그룹이 봉인되지 않은 경우 Async\AsyncException을 발생시킵니다.

예제

예제 #1 취소 후 대기

<?php

use Async\TaskGroup;
use function Async\suspend;

spawn(function() {
    $group = new TaskGroup();

    $group->spawn(function() {
        suspend();
        return "result";
    });

    $group->cancel();
    $group->awaitCompletion();

    echo "모든 코루틴이 완료되었습니다\n";
    var_dump($group->isFinished()); // bool(true)
});

예제 #2 대기 후 결과 가져오기

<?php

use Async\TaskGroup;

spawn(function() {
    $group = new TaskGroup();

    $group->spawn(fn() => "ok");
    $group->spawn(fn() => throw new \RuntimeException("fail"));

    $group->seal();
    $group->awaitCompletion();

    // 예외 없음 — 수동으로 확인
    $results = $group->getResults();
    $errors = $group->getErrors();

    echo "성공: " . count($results) . "\n"; // 1
    echo "오류: " . count($errors) . "\n";      // 1
});

참고