pub struct Interval { /* private fields */ }展开描述
由 interval 与 interval_at 返回的 Interval。
此类型允许你等待一系列时间点,相邻时间点之间具有固定的时长。与在循环中调用 sleep 不同,它还能统计两次 sleep 调用之间所耗费的时间。
可以通过 IntervalStream 将 Interval 转换为 Stream。
实现§
Source§impl Interval
impl Interval
Sourcepub async fn tick(&mut self) -> Instant
pub async fn tick(&mut self) -> Instant
当间隔内的下一时间点到达时完成。
§Cancel safety
此方法是 cancel safe 的。如果 tick 在 tokio::select! 中作为某个分支且其他分支先完成,则不会有 tick 被消耗。
§示例
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.Sourcepub fn reset(&mut self)
pub fn reset(&mut self)
将间隔重置为从当前时间起一个 period 之后完成。
此方法忽略 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.Sourcepub fn reset_immediately(&mut self)
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.Sourcepub fn reset_after(&mut self, after: Duration)
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.Sourcepub fn reset_at(&mut self, deadline: Instant)
pub fn reset_at(&mut self, deadline: Instant)
将该间隔重置为一个 crate::time::Instant 截止时间。
将下一个 tick 设置为在给定的 instant 到达时过期。如果该 instant 处于过去,则会使用 MissedTickBehavior 策略进行追赶。如果该 instant 处于未来,则下一个 tick 将在该 instant 完成,即使这意味着它将睡眠超过此 Interval 的 duration。如果在调用此方法之前该 Interval 已有任何错过的 tick,那些 tick 将被丢弃。
§示例
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.Sourcepub fn missed_tick_behavior(&self) -> MissedTickBehavior
pub fn missed_tick_behavior(&self) -> MissedTickBehavior
返回当前使用的 MissedTickBehavior 策略。
Sourcepub fn set_missed_tick_behavior(&mut self, behavior: MissedTickBehavior)
pub fn set_missed_tick_behavior(&mut self, behavior: MissedTickBehavior)
设置应使用的 MissedTickBehavior 策略。