Модуль 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.
Перечисления
- Missed
Tick Behavior - Определяет поведение
Interval, если он пропускает тик.
Функции
-
advance
test-util - Перемещает время вперёд.
- interval
- Создаёт новый
Interval, который выдаёт значения с интерваломperiod. Первый тик завершается немедленно. По умолчанию используется поведениеMissedTickBehaviorBurst, но его можно настроить, вызвавset_missed_tick_behavior. - interval_
at - Создаёт новый
Interval, который выдаёт значения с интерваломperiod; первый тик завершается в моментstart. По умолчанию используется поведениеMissedTickBehaviorBurst, но его можно настроить, вызвавset_missed_tick_behavior. -
pause
test-util - Приостанавливает время.
-
resume
test-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