#blocking #events #park #condvar #wake #envcount

no-std 事件监听策略

轻松在事件监听上阻塞或轮询

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 异步

Download history 680807/week @ 2024-05-01 734112/week @ 2024-05-08 752274/week @ 2024-05-15 754900/week @ 2024-05-22 788742/week @ 2024-05-29 742755/week @ 2024-06-05 727575/week @ 2024-06-12 672046/week @ 2024-06-19 722956/week @ 2024-06-26 671876/week @ 2024-07-03 719063/week @ 2024-07-10 746595/week @ 2024-07-17 771832/week @ 2024-07-24 786979/week @ 2024-07-31 835765/week @ 2024-08-07 830880/week @ 2024-08-14

每月 3,374,994 次下载
用于 4,816 个crate (6 个直接使用)

Apache-2.0 OR MIT

22KB
302

事件监听策略

Build License Cargo Documentation

一个用于在阻塞和非阻塞环境中使用 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 许可证定义的,任何有意提交以包含在作品中的贡献,都应按上述方式双授权,不附加任何额外条款或条件。

依赖关系

~355KB