Макрос 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));
}