Функция interval
pub fn interval(period: Duration) -> Interval
time.Создаёт новый Interval, который срабатывает с интервалом period. Первый тик завершается немедленно. По умолчанию используется MissedTickBehavior — Burst, но это поведение можно настроить, вызвав set_missed_tick_behavior.
Интервал будет срабатывать бесконечно. В любой момент значение Interval можно удалить. Это отменит интервал.
Эта функция эквивалентна interval_at(Instant::now(), period).
Паники
Эта функция вызывает панику, если period равен нулю.
Примеры
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().await может ожидать меньше времени, чем указано для интервала, если между вызовами .tick().await прошло некоторое время.
Если в примере ниже заменить тик на 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;
}
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/time/fn.interval.html