Skip to main content

TaskSlot

Struct TaskSlot 

Source
pub struct TaskSlot<T> { /* private fields */ }
Expand description

Owns one typed task and its forced-abort state across bounded drain attempts.

Call finish_task to observe the join outcome. Dropping the slot requests abort but cannot asynchronously prove termination.

Implementations§

Source§

impl<T> TaskSlot<T>

Source

pub const fn new() -> Self

Creates an empty task slot.

Source

pub const fn from_handle(handle: JoinHandle<T>) -> Self

Creates a task slot owning handle.

Source

pub fn spawn<F>(&mut self, future: F) -> Result<(), TaskSpawnError>
where T: Send + 'static, F: Future<Output = T> + Send + 'static,

Spawns and stores a task before its future can be polled.

§Errors

Returns an error if the task stops before its start gate opens. The terminal handle remains owned so its join outcome stays observable.

§Panics

Panics if the slot already owns a task.

Source

pub const fn is_some(&self) -> bool

Returns whether the slot owns a task.

Source

pub const fn is_none(&self) -> bool

Returns whether the slot is empty.

Source

pub const fn as_ref(&self) -> Option<&JoinHandle<T>>

Returns the owned task handle, when present.

Source

pub fn insert(&mut self, handle: JoinHandle<T>)

Stores a task in an empty slot.

§Panics

Aborts handle and panics if the slot already owns a task.

Source

pub fn abort(&mut self)

Requests task cancellation and records it as owner-initiated.

Trait Implementations§

Source§

impl<T: Debug> Debug for TaskSlot<T>

Source§

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

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

impl<T> Default for TaskSlot<T>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<T> Drop for TaskSlot<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl<T> Freeze for TaskSlot<T>
where Option<JoinHandle<T>>: Freeze,

§

impl<T> RefUnwindSafe for TaskSlot<T>
where Option<JoinHandle<T>>: RefUnwindSafe,

§

impl<T> Send for TaskSlot<T>
where Option<JoinHandle<T>>: Send,

§

impl<T> Sync for TaskSlot<T>
where Option<JoinHandle<T>>: Sync,

§

impl<T> Unpin for TaskSlot<T>
where Option<JoinHandle<T>>: Unpin,

§

impl<T> UnsafeUnpin for TaskSlot<T>
where Option<JoinHandle<T>>: UnsafeUnpin,

§

impl<T> UnwindSafe for TaskSlot<T>
where Option<JoinHandle<T>>: UnwindSafe,

Blanket Implementations§

§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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

Source§

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> Ungil for T
where T: Send,

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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