Struct maitake::task::TaskRef

source ·
pub struct TaskRef(/* private fields */);
Expand description

A type-erased, reference-counted pointer to a spawned Task.

Once a task has been spawned, it is generally referenced by a TaskRef. When a spawned task is placed in a scheduler’s run queue, dequeuing the next task will yield a TaskRef, and a TaskRef may be converted into a Waker or used to await a spawned task’s completion.

TaskRefs are reference-counted, and the task will be deallocated when the last TaskRef pointing to it is dropped.

Implementations§

source§

impl TaskRef

source

pub fn id(&self) -> TaskId

Returns a TaskId that uniquely identifies this task.

The returned ID does not increment the task’s reference count, and may persist even after the task it identifies has completed and been deallocated.

source

pub fn cancel(&self) -> bool

Forcibly cancel the task.

Canceling a task sets a flag indicating that it has been canceled and should terminate. The next time a canceled task is polled by the scheduler, it will terminate instead of polling the inner Future. If the task has a JoinHandle, that JoinHandle will complete with a JoinError. The task then will be deallocated once all JoinHandles and TaskRefs referencing it have been dropped.

This method returns true if the task was canceled successfully, and false if the task could not be canceled (i.e., it has already completed, has already been canceled, cancel culture has gone TOO FAR, et cetera).

source

pub fn is_complete(&self) -> bool

Returns true if this task has completed.

Tasks are considered completed when the spawned Future has returned Poll::Ready, or if the task has been canceled by the cancel() method.

Note: This method can return false after cancel() has been called. This is because calling cancel begins the process of cancelling a task. The task is not considered canceled until it has been polled by the scheduler after calling cancel().

Trait Implementations§

source§

impl Clone for TaskRef

source§

fn clone(&self) -> Self

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
source§

impl Debug for TaskRef

source§

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

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

impl Drop for TaskRef

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T> PartialEq<&JoinHandle<T>> for TaskRef

source§

fn eq(&self, other: &&JoinHandle<T>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T> PartialEq<&TaskRef> for JoinHandle<T>

source§

fn eq(&self, other: &&TaskRef) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T> PartialEq<JoinHandle<T>> for TaskRef

source§

fn eq(&self, other: &JoinHandle<T>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T> PartialEq<TaskRef> for JoinHandle<T>

source§

fn eq(&self, other: &TaskRef) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialEq for TaskRef

source§

fn eq(&self, other: &TaskRef) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Pointer for TaskRef

source§

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

Formats the value using the given formatter.
source§

impl Eq for TaskRef

source§

impl Send for TaskRef

source§

impl StructuralEq for TaskRef

source§

impl StructuralPartialEq for TaskRef

source§

impl Sync for TaskRef

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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> ToOwned for T
where 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 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.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more