Expand description
Due to the Stream
trait’s inclusion in std
landing later than Tokio’s 1.0
release, most of the Tokio stream utilities have been moved into the tokio-stream
crate.
Why was Stream
not included in Tokio 1.0?
Originally, we had planned to ship Tokio 1.0 with a stable Stream
type
but unfortunately the RFC had not been merged in time for Stream
to
reach std
on a stable compiler in time for the 1.0 release of Tokio. For
this reason, the team has decided to move all Stream
based utilities to
the tokio-stream
crate. While this is not ideal, once Stream
has made
it into the standard library and the MSRV period has passed, we will implement
stream for our different types.
While this may seem unfortunate, not all is lost as you can get much of the
Stream
support with async/await
and while let
loops. It is also possible
to create a impl Stream
from async fn
using the async-stream
crate.
Example
Convert a [sync::mpsc::Receiver
] to an 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;
}
};