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