跳到主要内容

Module stream

搜索

Module stream 

Source
展开描述

由于 Stream trait 进入 std 的时间 晚于 Tokio 的 1.0 发布, Tokio 的大多数流实用工具 已被移至 tokio-stream crate 中。

§Why was Stream not included in Tokio 1.0?

最初, 我们计划在 Tokio 1.0 中 附带一个稳定的 Stream 类型, 但不幸的是, RFC 未能及时合并, 使得 Stream 无法及时进入 std, 赶不上 Tokio 的 1.0 发布。 因此, 团队决定将所有基于 Stream 的实用工具 移至 tokio-stream crate。 虽然这不是理想之选, 但一旦 Stream 进入标准库 且 MSRV 周期结束, 我们将为我们的不同类型实现 stream。

虽然这似乎令人遗憾, 但并非毫无办法, 因为你可以使用 async/awaitwhile let 循环 获得大部分的 Stream 支持。 也可以使用 async-stream crate 从 async fn 创建一个 impl Stream

§Example

将一个 sync::mpsc::Receiver 转换为 impl Stream

use tokio::sync::mpsc;

let (tx, mut rx) = mpsc::channel::<usize>(16);

let stream = async_stream::stream! {
    while let Some(item) = rx.recv().await {
        yield item;
    }
};