Оператор await
Оператор await используется внутри
асинхронных функций и блоков для ожидания
результата выполнения будущего (future).
Он принимает будущее в качестве операнда
и возвращает значение, которое это будущее
производит по завершении. Пока будущее
не готово, выполнение текущей асинхронной
функции приостанавливается, а управление
передаётся исполнителю (executor), который
может выполнять другие задачи. Оператор
await можно применять только внутри
асинхронного контекста, то есть внутри
функции, помеченной async, или
внутри асинхронного блока.
Синтаксис
future.await
Оператор await записывается после
выражения, возвращающего будущее, и
не требует круглых скобок. Результатом
выражения является значение, которое
возвращает будущее.
Пример
Давайте создадим простую асинхронную
функцию, которая возвращает число, и
дождёмся её результата с помощью
оператора await:
async fn get_number() -> i32
{
42
}
async fn main()
{
let res = get_number().await;
println!("{}", res);
}
Результат выполнения кода:
42
Пример
Давайте последовательно дождёмся двух асинхронных операций и сложим их результаты:
async fn get_first() -> i32
{
10
}
async fn get_second() -> i32
{
20
}
async fn main()
{
let a = get_first().await;
let b = get_second().await;
let res = a + b;
println!("{}", res);
}
Результат выполнения кода:
30