await_all

(PHP 8.6+, True Async 1.0)

await_all()모든 태스크의 완료를 대기하며, 결과와 오류를 별도로 수집합니다. 개별 태스크가 실패해도 예외를 던지지 않습니다.

설명

await_all(
    iterable $triggers,
    ?Async\Awaitable $cancellation = null,
    bool $preserveKeyOrder = true,
    bool $fillNull = false
): array

매개변수

triggers Async\Completable 객체의 반복 가능한 컬렉션입니다.

cancellation 전체 대기를 취소하기 위한 선택적 Awaitable입니다.

preserveKeyOrder true(기본값)이면 입력 배열의 키 순서대로 결과가 반환됩니다. false이면 완료 순서대로 반환됩니다.

fillNull true이면 실패한 태스크의 결과 배열에 null이 배치됩니다. false(기본값)이면 오류가 있는 키는 생략됩니다.

반환 값

두 요소의 배열: [$results, $errors]

예제

예제 #1 부분 실패 허용

<?php
use function Async\spawn;
use function Async\await_all;

$coroutines = [
    'fast'   => spawn(file_get_contents(...), 'https://api/fast'),
    'slow'   => spawn(file_get_contents(...), 'https://api/slow'),
    'broken' => spawn(function() { throw new \Exception('Error'); }),
];

[$results, $errors] = await_all($coroutines);

// $results에는 'fast'와 'slow'가 포함됩니다
// $errors에는 'broken' => Exception이 포함됩니다
foreach ($errors as $key => $error) {
    echo "태스크 '$key' 실패: {$error->getMessage()}\n";
}
?>

예제 #2 fillNull 사용

<?php
[$results, $errors] = await_all($coroutines, fillNull: true);

// $results['broken'] === null (누락된 키 대신)
?>

참고

참고: triggers 매개변수는 Iterator 구현을 포함한 모든 iterable을 허용합니다. 반복 중에 코루틴을 동적으로 생성할 수 있습니다. Iterator 예제를 참조하세요.

같이 보기