Точка ожидания в Rust
Точка ожидания запускает функцию до следующей такой точки и потом забирает результат. Пока внутренняя работа не готова, исполнитель может переключиться на другие задачи.
Сначала подключим крейт исполнителя из корня проекта с нужными возможностями:
cargo add tokio --features macros,rt-multi-thread,time
Команда допишет зависимость в описание
пакета. Дальше правим точку входа в
src/main.rs.
Запишем асинхронную функцию, которая возвращает число, и заберем результат в главной функции через точку ожидания:
#[tokio::main]
async fn main() {
let n = step().await;
println!("{}", n);
}
async fn step() -> i32 {
2
}
На экране число 2. Запись с точкой
ожидания не блокирует поток целиком: она
лишь приостанавливает текущую асинхронную
функцию до готовности step.
Тот же прием с другим литералом внутри шага:
#[tokio::main]
async fn main() {
let n = step().await;
println!("{}", n);
}
async fn step() -> i32 {
5
}
Дано число:
let num = 7;
Сделайте асинхронную функцию, которая возвращает этот литерал, и выведите результат в главной функции через точку ожидания.
Скажите, что делает точка ожидания с асинхронной функцией, пока ее результат еще не готов.
Дано число:
let num = 3;
Две асинхронные функции возвращают литерал и его удвоение. Заберите оба результата по очереди в главной функции и выведите сумму.