future::try_join_all
是对 Future
集合的非阻塞调用,这样执行程序就会驱动所有 Future
完成。因为它是非阻塞的,所以它让步,然后调用者执行下一行代码。
例如在伪代码中
use future;
[... some fn main etc.]
let futures: Vec<_> = vec![future_one, future_two];
future::try_join_all(futures).await?;
println!("Hello");
即使 "Hello"
或
future_one
还没有完成它的执行,
future_two
也会被打印出来。
有没有一种方法可以阻止 Futures 的收集,以便在所有 futures 都完成后才将控制权交还给调用者?
这很简单:只需阻止
try_join_all()
。例如,与tokio
tokio::runtime::Handle::current().block_on(future::try_join_all(futures));