2 个版本

0.1.1 2020 年 4 月 16 日
0.1.0 2020 年 4 月 16 日

#123 in #net

MIT 许可证

140KB
2.5K SLoC

kayrx-timer


lib.rs:

时间跟踪

此模块提供了一些类型,用于在设定的时间后执行代码。

  • Delay 是一个不执行任何操作并在特定时间点完成的 future。

  • Interval 是一个在固定周期产生值的流。它使用 Duration 初始化,并在持续时间结束时重复产生值。

  • Timeout:封装一个 future 或 stream,设置其执行时间上限。如果 future 或 stream 没有在规定时间内完成,则取消它并返回错误。

  • DelayQueue:一个队列,当请求的延迟时间到期后返回项目。

这些类型足以处理涉及时间的许多场景。

必须在使用 Runtime 的上下文中使用这些类型。

示例

等待 100ms 并打印 "Hello World!"

use kayrx_timer::delay_for;
use std::time::Duration;
use kayrx_karx;

fn main() {
    kayrx_karx::exec(async {
        delay_for(Duration::from_millis(100)).await;
        println!("100 ms have elapsed");
    });
}

要求操作不超过 300ms。注意,这使用 FutureExt trait 上的 timeout 函数。此 trait 包含在预定义中。

use kayrx_timer::{timeout, Duration};

async fn long_future() {
    // do work here
}

let res = timeout(Duration::from_secs(1), long_future()).await;

if res.is_err() {
    println!("operation timed out");
}

依赖项

~135KB