pub fn interval(period: Duration) -> Interval展开描述
创建一个新的 Interval,以 period 间隔产生值。第一个 tick 立即完成。默认的 MissedTickBehavior 是 Burst,但可以通过调用 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 每两秒执行一个任务的简单示例。
interval 和 sleep 的区别在于,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;
}