【发布时间】:2020-09-03 02:25:35
【问题描述】:
给定Futures 的集合,比如Vec<impl Future<..>>,我如何才能阻止并同时运行所有Futures,直到第一个Future 准备好?
我能找到的最接近的功能是select macro(也是available in Tokio)。不幸的是,它只适用于明确数量的Futures,而不是处理它们的集合。
在 Javascript 中有一个与此功能等效的功能,称为 Promise.race。有没有办法在 Rust 中做到这一点?
或者也许有一种方法可以使用另一种模式来实现这个用例,也许是通道?
【问题讨论】:
-
我现在无法写出正确的答案,但请检查
FuturesUnordered(docs.rs/futures/0.3.5/futures/stream/…) 是否是您想要的。 -
我想你可能想要
futures::future::select_all -
这能回答你的问题吗? How can I spawn asynchronous methods in a loop? 具体看答案中定义的
join_parallel函数。 -
@user4815162342 我认为该建议不能回答问题,因为
join_parallel需要等待所有 个期货完成执行。相反,我只想等到最快的未来完成,然后解除阻塞线程。此外,并行执行期货不是这个问题的要求。但是感谢您的评论!
标签: asynchronous concurrency rust future