并发是在不同的线程上并行运行两个任务.但是,异步方法并行运行,但在同一个线程上运行.这是如何实现的?那么,并行性呢?
这3个概念之间有什么区别?
想象一下,一些 future 存储在一个Vec长度由运行时决定的 a 中,你应该同时加入这些 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() ); }
// ...
Run Code Online (Sandbox Code Playgroud)
我还注意到 tokio::join! 当我使用类似的语法时,将列表作为文档中的参数
tokio::join!(v);
Run Code Online (Sandbox Code Playgroud)
或类似的东西
tokio::join![ v ] / tokio::join![ v[..] ] …Run Code Online (Sandbox Code Playgroud)