РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1102 of 1245 menu

Оператор await

Оператор await используется внутри асинхронных функций и блоков async для ожидания результата выполнения Future. Параметром оператор принимает значение, реализующее трейт Future, и возвращает его выходное значение после завершения. Пока Future не готов, выполнение текущей задачи приостанавливается, а управление передаётся другим задачам асинхронного исполнителя.

Оператор await можно применять только внутри async-контекста. Он не блокирует поток, а именно приостанавливает задачу, что позволяет эффективно выполнять множество асинхронных операций одновременно.

Синтаксис

async fn func() { let res = some_future.await; }

Пример

Давайте создадим простую асинхронную функцию, которая возвращает число, и дождёмся её результата с помощью оператора await:

async fn get_value() -> i32 { 12345 } async fn main_async() { let res = get_value().await; println!("{}", res); } fn main() { futures::executor::block_on(main_async()); }

Результат выполнения кода:

12345

Пример

Давайте последовательно дождёмся двух асинхронных операций и сложим их результаты:

async fn get_first() -> i32 { 1 } async fn get_second() -> i32 { 2 } async fn main_async() { let a = get_first().await; let b = get_second().await; let res = a + b; println!("{}", res); } fn main() { futures::executor::block_on(main_async()); }

Результат выполнения кода:

3

Пример

Давайте дождёмся результата асинхронной функции, возвращающей строку:

async fn get_text() -> String { String::from("abcde") } async fn main_async() { let res = get_text().await; println!("{}", res); } fn main() { futures::executor::block_on(main_async()); }

Результат выполнения кода:

"abcde"

Смотрите также

  • раздел async,
    который описывает асинхронные функции и блоки
  • трейт Future,
    который представляет асинхронное вычисление
  • метод poll,
    который опрашивает состояние Future
  • перечисление Poll,
    которое хранит результат опроса Future
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить