Несколько ожиданий сразу в Rust
Несколько ожиданий можно собрать в один результат: исполнитель дождется каждого шага и вернет значения парой или большим кортежем.
Подключим макрос, который ждет два шага одновременно:
#[tokio::main]
async fn main() {
let (a, b) = tokio::join!(step_a(), step_b());
println!("{} {}", a, b);
}
async fn step_a() -> i32 {
2
}
async fn step_b() -> i32 {
5
}
На экране 2 5. Оба шага могут
идти параллельно на исполнителе, а
главная функция одной точкой ожидания
получает оба числа.
Тот же прием, когда один шаг чуть дольше из-за короткого сна:
#[tokio::main]
async fn main() {
let (x, y) = tokio::join!(quick(), slow());
println!("{} {}", x, y);
}
async fn quick() -> i32 {
1
}
async fn slow() -> i32 {
tokio::time::sleep(std::time::Duration::from_millis(20)).await;
9
}
Дано число:
let num = 4;
Два асинхронных шага возвращают литерал и его удвоение. Соберите оба результата одной общей точкой ожидания и выведите их через пробел.
Скажите, сколько значений вернет сопоставление с двумя именами слева, если в макрос передали ровно два асинхронных шага.
Дано число:
let num = 6;
Один шаг сразу отдает литерал, другой после короткого сна возвращает сумму литерала с единицей. Выведите оба ответа одной строкой.