Ключевое слово async
Возвращает Future вместо блокировки текущего потока.
Используйте async перед fn, замыканием или блоком, чтобы превратить помеченный код в Future. Таким образом, код не будет выполняться немедленно, а будет вычисляться только когда возвращенный фьючер будет ожидаться через .await.
Мы написали книгу по асинхронному программированию, детально описывающую async/await и компромиссы по сравнению с использованием потоков.
Управление потоком выполнения
Операторы return и ? внутри async-блоков не вызывают возврат из родительской функции; вместо этого они вызывают возврат значения из Future, возвращенного блоком.
Например, следующая Rust-функция вернет 5, в результате чего x получит тип !:
#![allow(unused)] fn main() { #[expect(unused_variables)] fn example() -> i32 { let x = { return 5; }; } }
В contrast, следующая асинхронная функция присваивает Future<Output = i32> переменной x, и возвращает 5 только когда x ожидается через .await:
#![allow(unused)] fn main() { async fn example() -> i32 { let x = async { return 5; }; x.await } }
Код с использованием ? ведет себя аналогично - он вызывает возврат Result из async-блока без влияния на родительскую функцию.
Обратите внимание, что вы не можете использовать break или continue внутри async-блока для влияния на управление циклом в родительской функции.
Управление потоком выполнения в async-блоках дополнительно документировано в книге по асинхронному программированию.
Издания (Editions)
async является ключевым словом начиная с издания 2018 года.
Оно доступно для использования в стабильном Rust начиная с версии 1.39.
В contrast, следующая асинхронная функция присваивает Future<Output = i32> переменной x, и возвращает 5 только когда x ожидается через .await:
#![allow(unused)] fn main() { async fn example() -> i32 { let x = async { return 5; }; x.await } }
Код с использованием ? ведет себя аналогично - он вызывает возврат Result из async-блока без влияния на родительскую функцию.
Обратите внимание, что вы не можете использовать break или continue внутри async-блока для влияния на управление циклом в родительской функции.
Управление потоком выполнения в async-блоках дополнительно документировано в книге по асинхронному программированию.
Издания (Editions)
async является ключевым словом начиная с издания 2018 года.
Оно доступно для использования в стабильном Rust начиная с версии 1.39.