7 个版本 (4 个破坏性更新)
0.5.2 | 2024年4月27日 |
---|---|
0.5.1 | 2024年3月30日 |
0.5.0 | 2024年2月7日 |
0.4.0 | 2023年11月21日 |
0.1.0 | 2023年9月11日 |
#1605 in 异步
每月 3,374,994 次下载
用于 4,816 个crate (6 个直接使用)
22KB
302 行
事件监听策略
一个用于在阻塞和非阻塞环境中使用 event-listener
crate 的策略。
event-listener
crate 的一个突出特点是能够在异步和同步环境中使用。然而,有时这样使用会导致大量样板代码的重复。这个crate旨在通过提供一个实现阻塞和非阻塞功能的 EventListenerFuture
trait 来减少这些样板代码。
示例
use event_listener::{Event, EventListener};
use event_listener_strategy::{EventListenerFuture, FutureWrapper, Strategy};
use std::pin::Pin;
use std::task::Poll;
use std::thread;
use std::sync::Arc;
// A future that waits three seconds for an event to be fired.
fn wait_three_seconds() -> WaitThreeSeconds {
let event = Event::new();
let listener = event.listen();
thread::spawn(move || {
thread::sleep(std::time::Duration::from_secs(3));
event.notify(1);
});
WaitThreeSeconds { listener }
}
struct WaitThreeSeconds {
listener: Pin<Box<EventListener>>,
}
impl EventListenerFuture for WaitThreeSeconds {
type Output = ();
fn poll_with_strategy<'a, S: Strategy<'a>>(
mut self: Pin<&'a mut Self>,
strategy: &mut S,
context: &mut S::Context,
) -> Poll<Self::Output> {
strategy.poll(self.listener.as_mut(), context)
}
}
// Use the future in a blocking context.
let future = wait_three_seconds();
future.wait();
// Use the future in a non-blocking context.
futures_lite::future::block_on(async {
let future = FutureWrapper::new(wait_three_seconds());
future.await;
});
许可
根据以下任一许可授权:
- Apache 许可证 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在作品中的贡献,都应按上述方式双授权,不附加任何额外条款或条件。
依赖关系
~355KB