跳到主要内容

interval

搜索

函数 interval 

Source
pub fn interval(period: Duration) -> Interval
展开描述

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

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

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

§Panics

如果 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 可能会比为该 interval 指定的持续时间 等待更短的时间。

如果将下面示例中的 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;
}