pub struct Interval { /* 私有字段 */ }展开描述
由 interval 和 interval_at 返回的 Interval。
此类型允许你等待一系列瞬时,每个瞬时之间有一定的时间间隔。与在循环中调用 sleep 不同,这还允许你计算两次调用 sleep 之间所花费的时间。
Interval 可以通过 IntervalStream 转换为 Stream。
实现§
源代码§impl Interval
impl Interval
源代码pub async fn tick(&mut self) -> Instant
pub async fn tick(&mut self) -> Instant
当达到间隔中的下一个瞬时时完成。
§取消安全性
此方法是可安全取消的。如果 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.源代码pub fn reset(&mut self)
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)
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)
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)
pub fn reset_at(&mut self, deadline: Instant)
将间隔重置为 crate::time::Instant 截止时间。
将下一个 tick 设置为在给定的瞬时到期。如果该瞬时在过去,则将使用 MissedTickBehavior 策略进行追赶。如果该瞬时在未来,则下一个 tick 将在给定的瞬时完成,即使这意味着它将睡眠超过此 Interval 的持续时间。如果在调用此方法之前 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.源代码pub fn missed_tick_behavior(&self) -> MissedTickBehavior
pub fn missed_tick_behavior(&self) -> MissedTickBehavior
返回当前正在使用的 MissedTickBehavior 策略。
源代码pub fn set_missed_tick_behavior(&mut self, behavior: MissedTickBehavior)
pub fn set_missed_tick_behavior(&mut self, behavior: MissedTickBehavior)
设置应使用的 MissedTickBehavior 策略。