🔁 присоединяйтесь! может объединять несколько асинхронных операций:
#![feature(future_join)]
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_all из ящика фьючерсов.
Из документов:
use futures::future::join_all; async fn foo(i: u32) -> u32 { i } let futures = vec![foo(1), foo(2), foo(3)]; assert_eq!(join_all(futures).await, [1, 2, 3]);
@ leo848 Макрос возвращает кортеж, поэтому его можно использовать с фьючерсами, которые возвращают разные типы. join_all принимает и возвращает массив, поэтому результаты должны быть одного типа.
Является ли макрос
joinболее эффективным или почему не стоит всегда использовать эту функцию вместо макроса?