await_first_success

(PHP 8.6+, True Async 1.0)

await_first_success() — Ожидает первую успешно завершившуюся задачу. Ошибки других задач собираются отдельно, а не прерывают ожидание.

Описание

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

Параметры

triggers Iterable коллекция объектов 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 "Получены данные\n";
} else {
    echo "Все серверы недоступны\n";
    foreach ($errors as $error) {
        echo "  - " . $error->getMessage() . "\n";
    }
}
?>

Примечания

Примечание: Параметр triggers принимает любые iterable, включая реализации Iterator. См. пример с Iterator.

См. также