Struct MultiWaker

Source
pub struct MultiWaker { /* private fields */ }
Expand description

A utility type ensures that multiple pollers can all be waken up.

With tokio’s design, poll_* functions will only wake up the waker associated with the last poller. This works well with tokio’s types, however due to OT-lib design issues, we might have multiple pollers (e.g. Uart’s API takes &self instead of &mut self). This utility ensures that even if multiple pollers are present, no wake messages will be lost.

Implementations§

Source§

impl MultiWaker

Source

pub fn new() -> Self

Create a new MultiWaker.

Source

pub fn waker(&self) -> Waker

Obtain a waker that can be used to wake up all registered wakers.

Source

pub fn register(&self) -> MultiWakerRegistration<'_>

Signal the intent to register a waker.

When registration eventually happens, it is treated as if the registration happens at this point in time. This is a cheap operation compared to the actual registration of the waker.

Source

pub fn poll_with<T, F: FnOnce(&mut Context<'_>) -> Poll<T>>( &self, cx: &mut Context<'_>, f: F, ) -> Poll<T>

Call a polling function with the guarantee of not losing Waker.

For the guarantee to be upheld the same MultiWaker instance should be used for every poll call.

Trait Implementations§

Source§

impl Default for MultiWaker

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V