Структура Interval
pub struct Interval { /* private fields */ }
time.Интервал, возвращаемый функциями interval и interval_at.
Этот тип позволяет ожидать последовательность моментов времени с заданной длительностью между ними. В отличие от вызова sleep в цикле, он также позволяет учитывать время, прошедшее между вызовами sleep.
Interval можно преобразовать в Stream с помощью IntervalStream.
Реализации
impl Interval
pub async fn tick(&mut self) -> Instant
Завершается, когда наступает следующий момент времени в интервале.
Безопасность отмены
Этот метод безопасен для отмены. Если tick используется как ветвь в tokio::select! и первой завершается другая ветвь, то ни один тик не был потреблён.
Примеры
use tokio::time;
use std::time::Duration;
let mut interval = time::interval(Duration::from_millis(10));
interval.tick().await;
// approximately 0ms have elapsed. The first tick completes immediately.
interval.tick().await;
interval.tick().await;
// approximately 20ms have elapsed.pub fn poll_tick(&mut self, cx: &mut Context<'_>) -> Poll<Instant>
Ожидает наступления следующего момента времени в интервале.
Этот метод может вернуть следующие значения:
-
Poll::Pending, если следующий момент времени ещё не наступил. -
Poll::Ready(instant), если следующий момент времени наступил.
Когда этот метод возвращает Poll::Pending, текущая задача планируется для пробуждения по истечении указанного времени. Обратите внимание, что при нескольких вызовах poll_tick пробуждение планируется только для Waker из Context, переданного при последнем вызове.
pub fn reset(&mut self)
Сбрасывает интервал так, чтобы он завершился через один период от текущего момента.
Этот метод игнорирует стратегию MissedTickBehavior.
Это эквивалентно вызову reset_at(Instant::now() + period).
Примеры
use tokio::time;
use std::time::Duration;
let mut interval = time::interval(Duration::from_millis(100));
interval.tick().await;
time::sleep(Duration::from_millis(50)).await;
interval.reset();
interval.tick().await;
interval.tick().await;
// approximately 250ms have elapsed.pub fn reset_immediately(&mut self)
Немедленно сбрасывает интервал.
Этот метод игнорирует стратегию MissedTickBehavior.
Это эквивалентно вызову reset_at(Instant::now()).
Примеры
use tokio::time;
use std::time::Duration;
let mut interval = time::interval(Duration::from_millis(100));
interval.tick().await;
time::sleep(Duration::from_millis(50)).await;
interval.reset_immediately();
interval.tick().await;
interval.tick().await;
// approximately 150ms have elapsed.pub fn reset_after(&mut self, after: Duration)
Сбрасывает интервал по истечении указанного значения std::time::Duration.
Этот метод игнорирует стратегию MissedTickBehavior.
Это эквивалентно вызову reset_at(Instant::now() + after).
Примеры
use tokio::time;
use std::time::Duration;
let mut interval = time::interval(Duration::from_millis(100));
interval.tick().await;
time::sleep(Duration::from_millis(50)).await;
let after = Duration::from_millis(20);
interval.reset_after(after);
interval.tick().await;
interval.tick().await;
// approximately 170ms have elapsed.pub fn reset_at(&mut self, deadline: Instant)
Сбрасывает интервал на момент времени crate::time::Instant, соответствующий крайнему сроку.
Задаёт момент истечения следующего тика. Если указанный момент времени уже прошёл, для наверстывания будет использоваться стратегия MissedTickBehavior. Если указанный момент времени ещё не наступил, следующий тик завершится в этот момент, даже если для этого интервалу придётся ждать дольше, чем длится период этого Interval. Если у Interval были пропущенные тики до вызова этого метода, они отбрасываются.
Примеры
use tokio::time::{self, Instant};
use std::time::Duration;
let mut interval = time::interval(Duration::from_millis(100));
interval.tick().await;
time::sleep(Duration::from_millis(50)).await;
let deadline = Instant::now() + Duration::from_millis(30);
interval.reset_at(deadline);
interval.tick().await;
interval.tick().await;
// approximately 180ms have elapsed.pub fn missed_tick_behavior(&self) -> MissedTickBehavior
Возвращает используемую в данный момент стратегию MissedTickBehavior.
pub fn set_missed_tick_behavior(&mut self, behavior: MissedTickBehavior)
Задаёт используемую стратегию MissedTickBehavior.
Реализации трейтов
Реализации автоматических трейтов
impl !RefUnwindSafe for Interval
impl !UnwindSafe for Interval
impl Freeze for Interval
impl Send for Interval
impl Sync for Interval
impl Unpin for Interval
impl UnsafeUnpin for Interval
Общие реализации
impl<T> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/time/struct.Interval.html