Struct stakker::task::Task

source ·
pub struct Task { /* private fields */ }
Expand description

An asynchronous task reference

Stakker provides only a very thin wrapping to enable tasks. Full support is provided in a separate crate (stakker_async_await). A task is represented as an implementation of the TaskTrait trait which is called when the task needs to be resumed. It is expected that even if the task cannot advance, it will accept a spurious call gracefully. Spurious calls may be generated for example if the task is woken from another thread.

It is guaranteed that the task is resumed directly from the main loop, not within any actor call nor any deeper down the stack. This may be important in order to avoid RefCell panics, or to allow the use of UnsafeCell. Internally this is statically guaranteed by using an ActorCell to wrap the closure. This code also handles the pinning required for running futures.

Deeper down the stack whilst the task is running, it is possible to get a reference to the running task by using Task::from_context. This may be used to implement efficient same-thread wakers.

Implementations§

source§

impl Task

source

pub fn new(core: &mut Core, inner: impl TaskTrait + 'static) -> Self

Create a new task from an implementation of the TaskTrait, and return a reference to it. (Task is like an Rc reference to the task.) The resume method will be called each time the task needs to be resumed.

source

pub fn resume(&mut self, s: &mut Stakker)

Resume execution of the task. The task will advance its state as much as possible, and then return. It’s intended that whatever poll-handler caused the task to yield will have saved a reference to this task to keep it alive until it can be woken again.

source

pub fn from_context(deferrer: &Deferrer) -> Option<Self>

Obtain the Task reference of the currently-running task from the provided Deferrer, if a task is currently running.

Trait Implementations§

source§

impl Clone for Task

source§

fn clone(&self) -> Task

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Task

§

impl !Send for Task

§

impl !Sync for Task

§

impl Unpin for Task

§

impl !UnwindSafe for Task

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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 Twhere 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> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

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

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere 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 Twhere 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.