展开描述
用于跟踪时间的工具。
此模块提供多种类型,用于在一段指定时间之后执行代码。
-
Timeout:包装一个 future 或 stream,为其允许执行的时间设置上限。如果该 future 或 stream 未能在规定时间内完成,则会被取消并返回一个错误。
这些类型足以处理涉及时间的大量场景。
这些类型必须在 Runtime 的上下文中使用。
§示例
等待 100ms 并输出“已过去 100ms”
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 起经过的时间,这意味着如果两次 .tick().await 调用之间已经过了一段时间,.tick().await 等待的时间可能比为此 interval 指定的 duration 更短。
如果将下方示例中的 tick 替换为 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返回的 Interval。 - Sleep
- 由
sleep和sleep_until返回的 future。 - Timeout
- 由
timeout和timeout_at返回的 future。
枚举§
- Missed
Tick Behavior - 当
Interval错过一个 tick 时定义其行为。
函数§
- interval
- 创建一个新的
Interval,以period为间隔周期产生 tick。第一次 tick 立即完成。默认的MissedTickBehavior为Burst,但可以调用set_missed_tick_behavior进行配置。 - interval_
at - 创建一个新的
Interval,以period为间隔周期产生 tick,第一次 tick 在start时完成。默认的MissedTickBehavior为Burst,但可以调用set_missed_tick_behavior进行配置。 - sleep
- 等待直到
duration时长过去。 - sleep_
until - 等待直到
deadline截止时刻到达。 - timeout
- 要求一个
Future在指定时长过去之前完成。 - timeout_
at - 要求一个
Future在指定时刻之前完成。