【发布时间】:2020-08-26 02:34:19
【问题描述】:
假设有些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!当我使用类似
的语法时,将列表作为文档中的参数tokio::join!(v);
或类似的东西
tokio::join![ v ] / tokio::join![ v[..] ] / tokio::join![ v[..][..] ]
它只是不起作用
问题来了,是否有任何途径可以更有效地加入这些未来,或者我是否应该错过与文件所说的内容相悖的内容?
【问题讨论】:
-
tokio::join!采用可变数量的异步表达式,而不是异步值的单个切片/vec。 -
误解了我在尝试自己解决此问题时制作的 tokio 文档。我假设一块异步代码(异步函数或异步表达式或其他)将被视为 rust 中的期货。而我的问题是如何以更清晰的方式同时加入这些长度变化的“异步表达式”。
标签: rust rust-tokio tokio