跳到主要内容

Module time

搜索

Module time 

Source
展开描述

用于跟踪时间的工具。

此模块提供多种类型,用于在一段指定时间之后执行代码。

  • Sleep 是一个不做任何工作的 future,它会在特定的 Instant 时刻完成。

  • Interval 是一个以固定周期产生值的流。它由一个 Duration 初始化,并在每次时长到达时反复产生值。

  • Timeout:包装一个 future 或 stream,为其允许执行的时间设置上限。如果该 future 或 stream 未能在规定时间内完成,则会被取消并返回一个错误。

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

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

§示例

等待 100ms 并输出“已过去 100ms”

use std::time::Duration;
use tokio::time::sleep;

sleep(Duration::from_millis(100)).await;
println!("100 ms have elapsed");

要求一个操作耗时不超过 1 秒。

use tokio::time::{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");
}

一个使用 interval 每两秒执行一次任务的简单示例。

intervalsleep 的区别在于,interval 度量的是自上一次 tick 起经过的时间,这意味着如果两次 .tick().await 调用之间已经过了一段时间,.tick().await 等待的时间可能比为此 interval 指定的 duration 更短。

如果将下方示例中的 tick 替换为 sleep,那么该任务将每三秒执行一次,而不是每两秒执行一次。

use tokio::time;

async fn task_that_takes_a_second() {
    println!("hello");
    time::sleep(time::Duration::from_secs(1)).await
}

let mut interval = time::interval(time::Duration::from_secs(2));
for _i in 0..5 {
    interval.tick().await;
    task_that_takes_a_second().await;
}

重新导出§

pub use std::time::Duration;

模块§

error
时间错误类型。

结构体§

Instant
单调递增时钟的一个度量值。不透明,仅与 Duration 一起使用时有意义。
Interval
intervalinterval_at 返回的 Interval。
Sleep
sleepsleep_until 返回的 future。
Timeout
timeouttimeout_at 返回的 future。

枚举§

MissedTickBehavior
Interval 错过一个 tick 时定义其行为。

函数§

interval
创建一个新的 Interval,以 period 为间隔周期产生 tick。第一次 tick 立即完成。默认的 MissedTickBehaviorBurst,但可以调用 set_missed_tick_behavior 进行配置。
interval_at
创建一个新的 Interval,以 period 为间隔周期产生 tick,第一次 tick 在 start 时完成。默认的 MissedTickBehaviorBurst,但可以调用 set_missed_tick_behavior 进行配置。
sleep
等待直到 duration 时长过去。
sleep_until
等待直到 deadline 截止时刻到达。
timeout
要求一个 Future 在指定时长过去之前完成。
timeout_at
要求一个 Future 在指定时刻之前完成。