1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
use async_fn_stream::fn_stream;
use futures_util::{pin_mut, Stream, StreamExt};
fn build_stream() -> impl Stream<Item = i32> {
fn_stream(|emitter| async move {
tokio::join!(
async {
for i in 0..3 {
// yield elements from stream via `emitter`
emitter.emit(i).await;
}
},
async {
for i in 10..13 {
// yield elements from stream via `emitter`
emitter.emit(i).await;
}
}
);
})
}
async fn example() {
let stream = build_stream();
pin_mut!(stream);
let mut numbers = Vec::new();
while let Some(number) = stream.next().await {
print!("{number} ");
numbers.push(number);
}
println!();
numbers.sort_unstable();
assert_eq!(numbers, vec![0, 1, 2, 10, 11, 12]);
}
#[tokio::main]
async fn main() {
futures_executor::block_on(example());
}
|