假设有一个存储在 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!
接受可变数量的异步表达式,而不是单个异步值的切片/向量。 - Masklinn