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));

有没有办法从一个向量连接多个期货,从而使异步调用的数量是动态的(在编译时未知)?

推荐答案

你可以使用期货 crate 中的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]);

Rust相关问答推荐

为什么我需要在这个代码示例中使用&

为什么`Vec i64`的和不知道是`Option i64`?

在自定义序列化程序中复制serde(With)的行为

有没有办法指定只在Rust的测试中有效的断言?

在使用#[NO_STD]时,如何在Rust中收到紧急消息?

是否可以在不切换到下一个位置的情况下获得迭代器值:

处理带有panic 的 Err 时,匹配臂具有不兼容的类型

类型生命周期绑定的目的是什么?

使用 serde::from_value 反序列化为泛型类型

为什么我可以使用 &mut (**ref) 创建两个实时 &mut 到同一个变量?

无法将`&Vec>`转换为`&[&str]`

使用 lalrpop 在 rust 中解析由 " 引用的字符串

`移动||异步移动{...}`,如何知道哪个移动正在移动哪个?

为什么 i32 Box 类型可以在 Rust 中向下转换?

使用 HashMap 条目时如何避免字符串键的短暂克隆?

为什么 Rust 编译器在移动不可变值时执行复制?

有没有办法隐藏类型定义?

如何制作具有关联类型的特征的类型擦除版本?

A 有一个函数,它在 Option<> 类型中时无法编译,但在 Option<> 类型之外会自行编译.为什么?

为什么 `ref` 会导致此示例*取消引用*一个字段?