#stream #aggregate #macro

multi_stream

将不同类型的多个流聚合到一个流中,其中项类型为传入流项的元组。

1 个不稳定版本

0.1.0 2023 年 6 月 29 日

#1904Rust 模式


用于 change_stream

MIT/Apache

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