假设一些future 存储在Vec中,其长度由运行时确定,您应该同时加入这些future ,您应该怎么做?

显然,以tokio::join为例,手动指定Vec的每个长度,比如1、2、3...处理体面的案子应该是有效的.

extern crate tokio;

let v = Vec::new();
v.push(future_1);

// directly or indirectly you push many futures to the vector
 
v.push(future_N);

// to join these futures concurrently one possible way is 

if v.len() == 0 {}
if v.len() == 1 { join!(v.pop()); }
if v.len() == 2 { join!(v.pop(), v.pop() ); }
// ...

我还注意到东京:加入!当我使用如下语法时,将列表作为文档中的参数

tokio::join!(v);

或者类似的

tokio::join![ v ] /  tokio::join![ v[..] ] / tokio::join![ v[..][..] ]

它就是不起作用

接下来的问题是,有没有更有效地加入这些future 的途径,或者我应该错过一些与文件所说相反的东西?

推荐答案

您可以使用futures::future::join_all将您的期货集合"合并"到一个单一的期货中,当所有子期货都解决时,该期货就解决了.

Rust相关问答推荐

如何在Rust中获得高效的浮点最大值

把Vector3变成Vector4的绝妙方法

如何创建引用构造函数拥有的变量的对象?

为潜在的下游实现使用泛型绑定而不是没有泛型绑定的trait

通过不同的字段进行散列和排序的 struct (需要不同的EQ实现)

如何定义实现同名但返回类型不同的 struct 的函数

在文件链实施中绕过borrow 判断器

装箱特性如何影响传递给它的参数的生命周期 ?(举一个非常具体的例子)

在为第三方 struct 实现第三方特征时避免包装器的任何方法

在 Rust 中查找向量中 dyn struct 的索引

sha256 摘要仅适用于 &*

如何在 Emacs Elisp 中获得类似格式化的 LSP?

Rust:`sort_by` 多个条件,冗长的模式匹配

在 Rust 中,Weak 如何知道内部值何时被删除?

使用自定义 struct 收集 Vec

将 (T, ()) 转换为 T 安全吗?

为什么我不能为 Display+Debug 的泛型类型实现 std::error::Error 但有一个不是泛型参数的类型?

为什么这个 Trait 无效?以及改用什么签名?

如何在 Rust 的泛型函​​数中同时使用非拥有迭代器和消费迭代器?

为什么这里需要类型注解?