Struct std::task::Waker

1.36.0 · source ·
#[repr(transparent)]
pub struct Waker { /* private fields */ }
Expand description

Waker 是通过通知执行者准备运行来唤醒任务的句柄。

该句柄封装了 RawWaker 实例,该实例定义了特定于执行者的唤醒行为。

Waker 的典型生命周期是它由执行程序构造,包裹在 Context 中,然后传递给 Future::poll()。 然后,如果 future 选择返回 Poll::Pending,它还必须以某种方式存储唤醒器,并在应该再次轮询 future 时调用 Waker::wake()

实现 CloneSendSync; 因此,可以从任何线程调用唤醒器,包括不以任何方式由执行程序管理的线程。 例如,当阻塞函数调用在另一个线程上完成时,可以这样做以唤醒 future。

Implementations§

source§

impl Waker

source

pub fn wake(self)

唤醒与此 Waker 相关的任务。

只要 executor 一直在运行,任务还没有完成,就保证每次调用 wake() (或者 wake_by_ref())) 之后都会至少跟这个 Waker 所属的任务的一个 poll()。 这使得在运行潜在的无限处理循环时可以暂时让步给其他任务。

请注意,以上暗示多个唤醒可能会被运行时合并为单个 poll() 调用。

另请注意,不能保证屈服于竞争任务: 执行者选择运行哪个任务,执行者可以选择再次运行当前任务。

source

pub fn wake_by_ref(&self)

唤醒与此 Waker 相关的任务,而不消耗 Waker

这类似于 wake(),但在拥有 Waker 可用的情况下效率可能会稍低。 此方法应该比调用 waker.clone().wake() 更可取。

source

pub fn will_wake(&self, other: &Waker) -> bool

如果此 Waker 和另一个 Waker 将唤醒相同的任务,则返回 true

该函数在尽力而为的基础上起作用,即使 Wakers 唤醒相同的任务,也可能返回 false。 但是,如果此函数返回 true,则可以确保 Waker 唤醒相同的任务。

该函数主要用于优化目的。

const: unstable · source

pub unsafe fn from_raw(waker: RawWaker) -> Waker

RawWaker 创建一个新的 Waker

如果未遵守 RawWakerRawWakerVTable 文档中定义的契约,则返回的 Waker 的行为是不确定的。

因此,此方法是不安全的。

source

pub fn as_raw(&self) -> &RawWaker

🔬This is a nightly-only experimental API. (waker_getters #87021)

获取对底层 RawWaker 的引用。

Trait Implementations§

source§

impl Clone for Waker

source§

fn clone(&self) -> Waker

返回值的副本。 Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

source 执行复制分配。 Read more
source§

impl Debug for Waker

source§

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

使用给定的格式化程序格式化该值。 Read more
source§

impl Drop for Waker

source§

fn drop(&mut self)

执行此类型的析构函数。 Read more
1.51.0 · source§

impl<W> From<Arc<W>> for Wakerwhere W: Wake + Send + Sync + 'static,

source§

fn from(waker: Arc<W>) -> Waker

使用 Wake 类型作为 Waker

此转换不使用堆分配或原子操作。

source§

impl Send for Waker

source§

impl Sync for Waker

source§

impl Unpin for Waker

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

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

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

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

source§

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

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

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

source§

fn into(self) -> U

调用 U::from(self)

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

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

获得所有权后的结果类型。
source§

fn to_owned(&self) -> T

从借用的数据创建拥有的数据,通常是通过克隆。 Read more
source§

fn clone_into(&self, target: &mut T)

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more
source§

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

§

type Error = Infallible

发生转换错误时返回的类型。
source§

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

执行转换。
source§

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

§

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

发生转换错误时返回的类型。
source§

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

执行转换。