Future::await
(PHP 8.6+, True Async 1.0)
php
public function await(?Completable $cancellation = null): mixedОжидает завершения Future и возвращает его результат. Блокирует текущую корутину до тех пор, пока Future не будет завершён. Если Future завершился с ошибкой, метод выбрасывает это исключение. Можно передать Completable для отмены ожидания по таймауту или внешнему условию.
Параметры
cancellation — объект отмены ожидания. Если указан и сработает до завершения Future, будет выброшено AsyncCancellation. По умолчанию null.
Возвращаемое значение
mixed — результат Future.
Ошибки
Выбрасывает исключение, если Future завершён с ошибкой или был отменён.
Примеры
Пример #1 Базовое ожидание результата
php
<?php
use Async\Future;
use Async\FutureState;
$state = new FutureState();
$future = new Future($state);
\Async\spawn(function() use ($state) {
\Async\delay(100);
$state->complete(42);
});
$result = $future->await();
echo "Результат: $result\n"; // Результат: 42Пример #2 Обработка ошибки при ожидании
php
<?php
use Async\Future;
use Async\FutureState;
$state = new FutureState();
$future = new Future($state);
\Async\spawn(function() use ($state) {
$state->error(new \RuntimeException("Что-то пошло не так"));
});
try {
$result = $future->await();
} catch (\RuntimeException $e) {
echo "Ошибка: " . $e->getMessage() . "\n";
// Ошибка: Что-то пошло не так
}См. также
- Future::isCompleted — Проверить завершённость Future
- Future::cancel — Отменить Future
- Future::map — Трансформация результата