Struct stakker::task::Task [−][src]
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]
Trait Implementations
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]
T: 'static + ?Sized,
impl<T> Any for T where
T: Any,
[src]
T: Any,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> CloneAny for T where
T: Any + Clone,
[src]
T: Any + Clone,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,