Struct stakker::task::Task[][src]

pub struct Task { /* fields omitted */ }

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

impl Task[src]

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

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.

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

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.

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

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

Trait Implementations

impl Clone for Task[src]

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

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Any for T where
    T: Any
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> CloneAny for T where
    T: Any + Clone
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.