Spec-Zone.ru › Tokio

Функция interval

pub fn interval(period: Duration) -> Interval
Доступно только при включённой функции crate 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API