跳到主要内容

interval

搜索

函数 interval 

源代码
pub fn interval(period: Duration) -> Interval
展开描述

创建一个新的 Interval,以 period 间隔产生值。第一个 tick 立即完成。默认的 MissedTickBehaviorBurst,但可以通过调用 set_missed_tick_behavior 进行配置。

interval 将无限期地 tick。在任何时候都可以 drop 该 Interval 值。这将取消该 interval。

此函数等效于 interval_at(Instant::now(), period)

§恐慌

如果 period 为零,此函数会发生 panic。

§示例

use tokio::time::{self, Duration};

let mut interval = time::interval(Duration::from_millis(10));

interval.tick().await; // ticks immediately
interval.tick().await; // ticks after 10ms
interval.tick().await; // ticks after 10ms

// approximately 20ms have elapsed.

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

intervalsleep 的区别在于,Interval 测量自上一个 tick 以来经过的时间,这意味着如果两次调用 .tick().await 之间经过了一些时间,则 .tick().await 可能等待的时间比为间隔指定的时间更短。

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

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;
}