跳到主要内容

Interval

搜索

结构体 Interval 

源代码
pub struct Interval { /* 私有字段 */ }
展开描述

intervalinterval_at 返回的 Interval。

此类型允许你等待一系列瞬时,每个瞬时之间有一定的时间间隔。与在循环中调用 sleep 不同,这还允许你计算两次调用 sleep 之间所花费的时间。

Interval 可以通过 IntervalStream 转换为 Stream

实现§

源代码§

impl Interval

源代码

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 poll_tick(&mut self, cx: &mut Context<'_>) -> Poll<Instant>

轮询以达到间隔中的下一个瞬时。

此方法可以返回以下值:

  • Poll::Pending if the next instant has not yet been reached.
  • Poll::Ready(instant) if the next instant has been reached.

当此方法返回 Poll::Pending 时,当前任务被调度以在该瞬时到达时接收唤醒。请注意,在多次调用 poll_tick 时,只有传递给最近一次调用的 Context 中的 Waker 会被调度接收唤醒。

源代码

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)

立即重置间隔。

此方法忽略 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)

在指定的 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)

将间隔重置为 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

返回当前正在使用的 MissedTickBehavior 策略。

源代码

pub fn set_missed_tick_behavior(&mut self, behavior: MissedTickBehavior)

设置应使用的 MissedTickBehavior 策略。

源代码

pub fn period(&self) -> Duration

返回间隔的周期。

trait 实现§

源代码§

impl Debug for Interval

源代码§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化器格式化此值。 更多信息

自动 trait 实现§

blanket 实现§

源代码§

impl<T> Any for T
where T: 'static + ?Sized,

源代码§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
源代码§

impl<T> Borrow<T> for T
where T: ?Sized,

源代码§

fn borrow(&self) -> &T

Immutably borrows from an owned value. 更多信息
源代码§

impl<T> BorrowMut<T> for T
where T: ?Sized,

源代码§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. 更多信息
源代码§

impl<T> From<T> for T

源代码§

fn from(t: T) -> T

原样返回参数。

源代码§

impl<T, U> Into<U> for T
where U: From<T>,

源代码§

fn into(self) -> U

调用 U::from(self)

也就是说,此转换是 From<T> for U 实现选择执行的操作。

源代码§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

源代码§

type Error = Infallible

转换出错时返回的类型。
源代码§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
源代码§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

源代码§

type Error = <U as TryFrom<T>>::Error

转换出错时返回的类型。
源代码§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。