Skip to content

Latest commit

 

History

History
31 lines (24 loc) · 2.81 KB

await-multiple-futures.md

File metadata and controls

31 lines (24 loc) · 2.81 KB

如何同时等待多个 Future

如果想要等待多个 Future 都完成后返回,对于固定数量的 Future 可以使用 futures 所提供的 joinjoin3join4 等函数,或者 tokio 所提供的 join! 宏,将多个 Future 合并为一个进行等待。对于不定数量的 Future,比如有一个 Vec,则可以使用 futures 的 join_all 函数。

若要在数个 Future 中第一个错误发生时就返回,则可以使用它们对应的 try_jointry_join3try_join4try_join_all 等函数以及 try_join! 宏。

如果想要在多个 Future 中的第一个完成后就返回,可以使用 futures 的 selectselect_allselect_ok 函数或 tokio 的 select! 宏。

此外,futures 还提供了 FuturesOrderedFuturesUnordered 两个结构,它们将这些 Future 聚合成一个 Stream 逐个返回里面 Future 的结果。其中前者会按照输入的 Future 的顺序返回,而后者则是以任意顺序(可以近似看作按照完成顺序)返回。这两个结构额外提供了 push 方法来动态插入新的 Future,而且它们只会 poll 被唤醒的 Future,在 Future 数量较多时可能更高效。前面提到的 join_all 也会在一些情况下会自动使用 FuturesOrdered 来优化。