Макрос join
#![allow(unused)] fn main() { pub macro join($($fut:expr),+ $(,)?) { ... } }
🔬 Это экспериментальный API, доступный только в ночных сборках. (
future_join#91642)
Одновременно опрашивает несколько фьючеров, возвращая кортеж со всеми результатами после их завершения.
Хотя join!(a, b).await похоже на (a.await, b.await), макрос join! опрашивает оба фьючера конкурентно и поэтому более эффективен.
Примеры
#![allow(unused)] #![feature(future_join)] fn main() { use std::future::join; async fn one() -> usize { 1 } async fn two() -> usize { 2 } let x = join!(one(), two()).await; assert_eq!(x, (1, 2)); }
join! является вариативным, поэтому вы можете передавать любое количество фьючеров:
#![allow(unused)] #![feature(future_join)] fn main() { use std::future::join; async fn one() -> usize { 1 } async fn two() -> usize { 2 } async fn three() -> usize { 3 } let x = join!(one(), two(), three()).await; assert_eq!(x, (1, 2, 3)); }
join! является вариативным, поэтому вы можете передавать любое количество фьючеров:
#![allow(unused)] #![feature(future_join)] fn main() { use std::future::join; async fn one() -> usize { 1 } async fn two() -> usize { 2 } async fn three() -> usize { 3 } let x = join!(one(), two(), three()).await; assert_eq!(x, (1, 2, 3)); }