1 个不稳定版本
0.1.0 | 2023 年 6 月 29 日 |
---|
#1904 在 Rust 模式
10KB
167 行
多流
将不同类型的多个流聚合到一个流中,其中项类型为传入流项的元组。
重要
- 如果任何流发出新值,则会轮询流并发出新的流项
- 当发出新的流值时,会克隆值,因此传入流项必须是可克隆的
- 发出的元组中的项都返回为
Option
,因为它们对应的流可能永远不会发出 - 该宏仅支持多达 12 个输入流
示例用法
- 添加到您的 Cargo.toml 文件中
[dependencies]
multi_stream = "0.1.0"
- 导入
muti_stream
宏并将流实例传递给创建新的流
use async_stream::stream;
use futures::StreamExt;
use multi_stream::multi_stream;
use rand::random;
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() {
let a = stream! {
sleep(Duration::from_millis(random::<u8>().into())).await;
yield 1;
sleep(Duration::from_millis(random::<u8>().into())).await;
yield 2;
sleep(Duration::from_millis(random::<u8>().into())).await;
yield 3;
};
let b = stream! {
sleep(Duration::from_millis(random::<u8>().into())).await;
yield 4;
sleep(Duration::from_millis(random::<u8>().into())).await;
yield 5;
sleep(Duration::from_millis(random::<u8>().into())).await;
yield 6;
};
multi_stream!(a, b)
.for_each(|(a, b)| async move {
//emitted when any of the streams has a new value
dbg!((a, b));
})
.await;
}
依赖项
~1–1.7MB
~34K SLoC