await_first_success

(PHP 8.6+, True Async 1.0)

await_first_success() — 等待第一个成功完成的任务。其他任务的错误被单独收集,不会中断等待。

描述

await_first_success(
    iterable $triggers,
    ?Async\Awaitable $cancellation = null
): array

参数

triggers Async\Completable 对象的可迭代集合。

cancellation 可选的 Awaitable,用于取消等待。

返回值

包含两个元素的数组:[$result, $errors]

示例

示例 #1 容错请求

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

// 尝试多个服务器;取第一个成功的响应
[$result, $errors] = await_first_success([
    spawn(file_get_contents(...), 'https://primary.example.com/api'),
    spawn(file_get_contents(...), 'https://secondary.example.com/api'),
    spawn(file_get_contents(...), 'https://fallback.example.com/api'),
]);

if ($result !== null) {
    echo "Data received\n";
} else {
    echo "All servers unavailable\n";
    foreach ($errors as $error) {
        echo "  - " . $error->getMessage() . "\n";
    }
}
?>

注意事项

注意: triggers 参数接受任何 iterable,包括 Iterator 实现。参见 Iterator 示例

参见