跳到主要内容

interval

搜索

函数 interval 

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

创建一个新的 Interval,以 period 为间隔周期产生 tick。第一次 tick 立即完成。默认的 MissedTickBehavior 为 Burst,但可以调用 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 每两秒执行一个任务的简单示例。

interval 和 sleep 的区别在于, 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;
}