#计时器 #异步

无std async-timer

Rust异步编程的计时器

41次发布

1.0.0-beta.142024年6月25日
1.0.0-beta.132024年3月23日
1.0.0-beta.122024年2月10日
1.0.0-beta.112023年10月27日
0.2.10 2019年7月15日

#65WebAssembly

Download history 8067/week @ 2024-04-24 9656/week @ 2024-05-01 8197/week @ 2024-05-08 9866/week @ 2024-05-15 8198/week @ 2024-05-22 5846/week @ 2024-05-29 6885/week @ 2024-06-05 6109/week @ 2024-06-12 5054/week @ 2024-06-19 5452/week @ 2024-06-26 4360/week @ 2024-07-03 3972/week @ 2024-07-10 5093/week @ 2024-07-17 3483/week @ 2024-07-24 2520/week @ 2024-07-31 1213/week @ 2024-08-07

12,935 每月下载量
28 个crates(16个直接) 中使用

BSL-1.0 许可证

64KB
1.5K SLoC

async-timer

Rust Crates.io Documentation dependency status

Rust异步编程的计时器设施

精度

不依赖于异步事件循环的常规计时器通常与用户空间计时器(如tokio)相当。如果您不适用,应启用基于事件循环的计时器,这在大多数情况下会在Unix平台上提供最精确的计时器(见特性。)

特性

  • tokio1 - 启用使用tokio的基于事件循环的计时器,在Unix平台上提供更高分辨率的计时器。
  • c_wrapper - 使用C包装器创建到平台API的绑定,这可能比libc更可靠。
  • std - 启用使用std类型(例如Error)的功能

示例

定时器

async fn job() {
}

async fn do_job() {
    let work = unsafe {
        async_timer::Timed::platform_new_unchecked(job(), core::time::Duration::from_secs(1))
    };

    match work.await {
        Ok(_) => println!("I'm done!"),
        //You can retry by polling `expired`
        Err(expired) => println!("Job expired: {}", expired),
    }
}

间隔

async fn job() {
}

async fn do_a_while() {
    let mut times: u8 = 0;
    let mut interval = async_timer::Interval::platform_new(core::time::Duration::from_secs(1));

    while times < 5 {
        job().await;
        interval.wait().await;
        times += 1;
    }
}

依赖

~0–8.5MB
~62K SLoC