问题描述
我正在使用 Tokio,我想从两个不同的 mpsc
队列接收请求.select!
似乎是要走的路,但我不确定 futures::select!
和 tokio::select!
之间有什么区别代码>.在哪种情况下,您应该使用一种而不是另一种?
tokio::select!
是基于 futures::select!
的经验构建的,但改进了稍微调整一下以使其更符合人体工程学.例如.futures-rs
版本的 select!
需要 Future
s 来实现 FusedFuture
,而 Tokio 的版本不再需要这个.
与此相反,Tokio 的版本支持宏中的先决条件以涵盖相同的用例.
tokio 存储库中的 PR 对此进行了更多阐述.
此更改也是 为 futures-rs 版本提出的,但目前尚未在那里实施.
如果您的项目中已经包含 Tokio,那么使用 Tokio 的版本似乎更可取.但是,如果您没有并且不想添加额外的依赖项,那么 futures-rs 版本也将以几乎相同的方式涵盖大多数用例.主要区别在于某些Future
可能需要通过FutureExt::fuse()
扩展方法转换为FusedFuture
.>
I'm using Tokio and I want to receive requests from two different mpsc
queues. select!
seems like the way to go, but I'm not sure what the difference is between futures::select!
and tokio::select!
. Under which circumstances one should you use one over the other?
tokio::select!
was built out of experiences with futures::select!
, but improves a bit on it to make it more ergonomic. E.g. the futures-rs
version of select!
requires Future
s to implement FusedFuture
, whereas Tokio's version no longer requires this.
Instead of this, Tokio's version supports preconditions in the macro to cover the same use-cases.
The PR in the tokio repo elaborates a bit more on this.
This change was also proposed for the futures-rs version, but has not been implemented there so far.
If you already have Tokio included in your project, then using Tokio's version seems preferable. But if you have not and do not want to add an additional dependency, then the futures-rs version will cover most use-cases too in a nearly identical fashion. The main difference is that some Future
s might need to be converted into FusedFuture
s through the FutureExt::fuse()
extension method.
这篇关于期货::选择有什么区别!和 tokio::select?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!