tokio_util::StreamExt 和 futures::StreamExt 有什么区别?

问题描述 投票:0回答:1

在开发 Web 应用程序时,我使用 tokio_util::StreamExt::then 方法来管理请求流。令人惊讶的是,我发现用 futures::StreamExt 替换 tokio_util::StreamExt ,我的代码仍然有效。我很好奇这种现象发生的根本原因。 为了获得进一步的了解,我尝试查阅 docs.rs/tokio_util 上的文档;然而,我发现它很难理解。有人可以帮我理解这个问题吗?

rust rust-tokio
1个回答
0
投票

它们是不同的特征,为常见的流操作提供相同的适配器(

.map
.filter
.collect
等)。因此,如果您只使用基本的东西,您可能不会注意到差异。

您通常应该更喜欢 futures 箱中的那个,因为它提供了更多方法(即更多功能)。然而,tokio-stream 的版本有一些与时间相关的 tokio 特定方法(

.throttle
.timeout
等)。


了解一些历史:早在 0.2 天的东京,他们就有自己的

Stream
StreamExt
特征(参见当时的
tokio::stream
)。然而,在 tokio 0.3 中,他们决定在 futures 特征下进行统一,但是由于他们的
StreamExt
已经存在于 tokio 特定的方法中,因此它被保留下来(参见当时的
tokio::stream
)。

最终在 tokio 1.0 中,流功能被完全删除到一个单独的板条箱,tokio-stream(现在参见

tokio::stream
),因为他们不想用不是来自
Stream
的特征来稳定它标准库。为了了解更多背景信息,我们的意图是将 futures 的
Stream
特征纳入标准库,但迄今为止尚未发生。

© www.soinside.com 2019 - 2024. All rights reserved.