5个版本
0.1.4 | 2022年9月7日 |
---|---|
0.1.3 | 2022年9月6日 |
0.1.2 | 2022年9月6日 |
0.1.1 | 2022年6月20日 |
0.1.0 | 2022年6月20日 |
#1553 在 异步
在 2 个crate中使用 async_event_streams_derive)
26KB
413 行
异步事件流
用于使用异步流发布多个消费者的事件库
库提供了 EventStreams<T: 'static + Send + Sync>
对象,该对象将类型 T
的事件转换为任意数量的 EventStream
对象,这些对象实现了标准 futures::Stream
接口
使用示例
use futures::{executor::LocalPool, task::LocalSpawnExt, StreamExt};
use async_events::EventStreams;
let mut pool = LocalPool::new();
let streams = EventStreams::new();
let mut stream = streams.create_event_stream();
let sender_task = async move {
assert!(streams.count() == 1);
streams.send_event(42, None).await;
streams.send_event(451, None).await;
streams.send_event(1984, None).await;
};
let receiver_task = async move {
let mut values = Vec::new();
while let Some(event) = stream.next().await {
values.push(*event)
}
// next() returns none when 'streams' is dropped
assert!(values == vec![42, 451, 1984]);
};
pool.spawner().spawn_local(sender_task);
pool.spawner().spawn_local(receiver_task);
pool.run();
依赖关系
~5–15MB
~196K SLoC