加入动态数量的期货

Yuc*_*ong 3 rust

join!可以加入多个异步操作:

#![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));
Run Code Online (Sandbox Code Playgroud)

有没有办法从一个向量中加入多个 future,以便异步调用的数量是动态的(在编译时未知)?

caf*_*e25 5

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]);
Run Code Online (Sandbox Code Playgroud)

  • @leo848 该宏返回一个元组,因此它可以与返回不同类型的 future 一起使用。`join_all` 接受并返回一个数组,因此结果必须是相同的类型。 (2认同)