8个版本
使用旧Rust 2015
0.2.4 | 2017年1月20日 |
---|---|
0.2.3 | 2017年1月19日 |
0.1.2 | 2017年1月18日 |
在并发中排名#851
32KB
348 行
并行事件发射器
一个事件发射器的实现,它在一个可配置的线程池中并发调用事件监听器回调,使用 Future
通知调用者成功或错误。
由于所有值都必须在线程边界之间传输,所有类型 T
必须是 Send
。
此外,所有类型 T
必须是 Any
,所以 T: 'static
。
用法
[dependencies]
futures = "0.1"
parallel-event-emitter = "0.2.4"
使用 String
作为键的示例
extern crate futures;
extern crate parallel_event_emitter;
use futures::Future;
use parallel_event_emitter::*;
fn main() {
let mut emitter: ParallelEventEmitter<String> = ParallelEventEmitter::new();
emitter.add_listener("some event", || {
println!("Hello, World!");
Ok(())
}).unwrap();
assert_eq!(1, emitter.emit("some event").wait().unwrap());
}
或使用自定义事件类型
extern crate futures;
extern crate parallel_event_emitter;
use futures::Future;
use parallel_event_emitter::*;
#[derive(Debug, Hash, PartialEq, Eq, Clone)]
enum MyEvents {
EventA,
EventB,
}
fn main() {
let mut emitter: ParallelEventEmitter<MyEvents> = ParallelEventEmitter::new();
emitter.add_listener(MyEvents::EventA, || {
println!("Hello, World!");
Ok(())
}).unwrap();
assert_eq!(1, emitter.emit(MyEvents::EventA).wait().unwrap());
}
Trace<E>
类型
此crate依赖于trace-error
crate,以便在所有错误 Result
上具有简单和轻量级的回溯。
如果您选择不使用它,这对我来说是可以的,只需在所有 Trace<E>
值上调用 .into_error()
即可获取真实错误。
impl Trait
功能
与所有 emit*
方法返回一个boxed Future
(BoxFuture
) 相比,Cargo功能 conservative_impl_trait
可以启用所有 emit*
方法的 impl Future
返回类型。
[dependencies.parallel-event-emitter]
version = "0.2.4"
features = ["default", "conservative_impl_trait"] # And maybe integer_atomics
更大的 ListenerId
虽然 ListenerId
类型本身是 u64
,但底层的原子计数器默认情况下受限于 AtomicUsize
。
要启用真正的保证64位计数器,请使用crate的 integer_atomics
功能。
[dependencies.parallel-event-emitter]
version = "0.2.4"
features = ["default", "integer_atomics"] # And maybe conservative_impl_trait
依赖关系
~2.6–3.5MB
~73K SLoC