Spec-Zone.ru › Tokio

Модуль stream

Поскольку трейт Stream вошёл в std позже, чем состоялся выпуск Tokio 1.0, большинство утилит Tokio для потоков перенесли в крейт tokio-stream.

Почему Stream не вошёл в Tokio 1.0?

Изначально мы планировали выпустить Tokio 1.0 со стабильным типом Stream, но, к сожалению, RFC RFC не успел пройти слияние, чтобы Stream достиг std в стабильном компиляторе к выпуску Tokio 1.0. По этой причине команда решила перенести все утилиты на основе Stream в крейт tokio-stream. Хотя это не идеальный вариант, после того как Stream появится в стандартной библиотеке и закончится период MSRV, мы реализуем потоки для наших различных типов.

Хотя это может показаться досадным, не всё потеряно: большую часть поддержки Stream можно получить с помощью циклов async/await и while let. Также можно создать impl Stream из async fn с помощью крейта async-stream.

Пример

Преобразование 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;
    }
};

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/stream/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API