期货::选择有什么区别!和 tokio::select?

yni*_*ous 6 asynchronous rust rust-tokio

我正在使用 Tokio,我想接收来自两个不同mpsc队列的请求。select!似乎是要走的路,但我不确定futures::select!和之间有什么区别tokio::select!。在哪种情况下,您应该使用一种而不是另一种?

Mat*_*247 9

tokio::select!是根据使用 的经验而构建的futures::select!,但对其进行了一些改进以使其更符合人体工程学。例如futures-rsselect!requires Futures to implementFusedFuture的版本,而 Tokio 的版本不再需要这个。

取而代之的是,Tokio 的版本支持宏中的先决条件以涵盖相同的用例。

tokio repo 中PR对此进行了更多阐述。

为 futures-rs 版本提出了此更改,但到目前为止尚未在那里实施。

如果您的项目中已经包含 Tokio,那么使用 Tokio 的版本似乎更可取。但是,如果您没有并且不想添加额外的依赖项,那么 futures-rs 版本也将以几乎相同的方式涵盖大多数用例。主要区别在于,有些Futures 可能需要FusedFuture通过FutureExt::fuse()扩展方法转换为s 。