Struct async_task::WithInfo

source ·
pub struct WithInfo<F>(pub F);
Expand description

Pass a scheduling function with more scheduling information - a.k.a. ScheduleInfo.

Sometimes, it’s useful to pass the runnable’s state directly to the scheduling function, such as whether it’s woken up while running. The scheduler can thus use the information to determine its scheduling strategy.

The data source of ScheduleInfo is directly from the actual implementation of the crate itself, different from Runnable’s metadata, which is managed by the caller.

Examples

use async_task::{ScheduleInfo, WithInfo};
use std::sync::{Arc, Mutex};

// The future inside the task.
let future = async {
    println!("Hello, world!");
};

// If the task gets woken up while running, it will be sent into this channel.
let (s, r) = flume::unbounded();
// Otherwise, it will be placed into this slot.
let lifo_slot = Arc::new(Mutex::new(None));
let schedule = move |runnable, info: ScheduleInfo| {
    if info.woken_while_running {
        s.send(runnable).unwrap()
    } else {
        let last = lifo_slot.lock().unwrap().replace(runnable);
        if let Some(last) = last {
            s.send(last).unwrap()
        }
    }
};

// Create a task with the future and the schedule function.
let (runnable, task) = async_task::spawn(future, WithInfo(schedule));

Tuple Fields§

§0: F

Trait Implementations§

source§

impl<F: Debug> Debug for WithInfo<F>

source§

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

Formats the value using the given formatter. Read more
source§

impl<F> From<F> for WithInfo<F>

source§

fn from(value: F) -> Self

Converts to this type from the input type.
source§

impl<M, F> Schedule<M> for WithInfo<F>
where F: Fn(Runnable<M>, ScheduleInfo),

source§

fn schedule(&self, runnable: Runnable<M>, info: ScheduleInfo)

The actual scheduling procedure.

Auto Trait Implementations§

§

impl<F> RefUnwindSafe for WithInfo<F>
where F: RefUnwindSafe,

§

impl<F> Send for WithInfo<F>
where F: Send,

§

impl<F> Sync for WithInfo<F>
where F: Sync,

§

impl<F> Unpin for WithInfo<F>
where F: Unpin,

§

impl<F> UnwindSafe for WithInfo<F>
where F: UnwindSafe,

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<!> for T

source§

fn from(t: !) -> T

Converts to this type from the input type.
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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.