Spec-Zone.ru › Tokio

Модуль time

Доступен только при включённой функции крейта time.

Утилиты для отслеживания времени.

Этот модуль предоставляет ряд типов для выполнения кода по истечении заданного периода времени.

  • Sleep — это future, который не выполняет никакой работы и завершается в определённый момент времени Instant.

  • Interval — это поток, выдающий значение через фиксированные промежутки времени. Он инициализируется значением Duration и повторно выдаёт значение по истечении каждого такого промежутка.

  • Timeout: оборачивает future или поток, устанавливая верхнюю границу времени, в течение которого ему разрешено выполняться. Если future или поток не завершается вовремя, он отменяется и возвращается ошибка.

Этих типов достаточно для обработки множества сценариев, связанных со временем.

Эти типы необходимо использовать в контексте Runtime.

Примеры

Подождать 100 мс и вывести «Прошло 100 мс»

use std::time::Duration;
use tokio::time::sleep;

sleep(Duration::from_millis(100)).await;
println!("100 ms have elapsed");

Требовать, чтобы операция занимала не более 1 с.

use tokio::time::{timeout, Duration};

async fn long_future() {
    // do work here
}

let res = timeout(Duration::from_secs(1), long_future()).await;

if res.is_err() {
    println!("operation timed out");
}

Простой пример использования 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;
}

Повторно экспортируемые элементы

pub use std::time::Duration;

Модули

error
Типы ошибок времени.

Структуры

Instant
Измерение монотонных неубывающих часов. Непрозрачный тип, полезный только вместе с Duration.
Interval
Интервал, возвращаемый функциями interval и interval_at.
Sleep
Future, возвращаемый функциями sleep и sleep_until.
Timeout
Future, возвращаемый функциями timeout и timeout_at.

Перечисления

MissedTickBehavior
Определяет поведение Interval, если он пропускает тик.

Функции

advancetest-util
Перемещает время вперёд.
interval
Создаёт новый Interval, который выдаёт значения с интервалом period. Первый тик завершается немедленно. По умолчанию используется поведение MissedTickBehavior Burst, но его можно настроить, вызвав set_missed_tick_behavior.
interval_at
Создаёт новый Interval, который выдаёт значения с интервалом period; первый тик завершается в момент start. По умолчанию используется поведение MissedTickBehavior Burst, но его можно настроить, вызвав set_missed_tick_behavior.
pausetest-util
Приостанавливает время.
resumetest-util
Возобновляет отсчёт времени.
sleep
Ожидает истечения duration.
sleep_until
Ожидает наступления момента deadline.
timeout
Требует, чтобы Future завершился до истечения указанного периода времени.
timeout_at
Требует, чтобы Future завершился до указанного момента времени.

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/time/index.html

Spec-Zone.ru

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