Skip to main content

SharedTaskSlot

Struct SharedTaskSlot 

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

Owns one typed task shared by cloned clients.

Concurrent finish calls are serialized within the caller’s graceful and abort durations. Canceling a finish or reaching the forced-completion deadline retains the task for another drain attempt. Dropping the owner requests abort but cannot asynchronously prove termination.

Implementations§

Source§

impl<T> SharedTaskSlot<T>

Source

pub fn new() -> Self

Creates an empty shared task slot.

Source

pub fn is_empty(&self) -> bool

Returns whether the slot owns no task, including while a drain is pending.

Source

pub fn is_finished(&self) -> bool

Returns whether the owned task has finished without being joined.

Returns false while a drain owns the handle and its state is unavailable.

Source

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

Stores a task in an empty slot.

§Panics

Aborts handle and panics if the slot already owns a task or is draining one.

Source

pub fn spawn<F>(&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 or is draining one.

Source

pub fn try_insert_slot(&self, slot: TaskSlot<T>) -> Result<(), TaskSlot<T>>

Transfers a task slot into this owner if it is empty.

An empty input slot is always accepted. Returns a nonempty input unchanged when this owner already has a task or is draining one.

§Errors

Returns the input slot when this owner already has a task or is draining one.

Source

pub fn abort(&self)

Requests task cancellation and records it as owner-initiated.

§Panics

Panics if the shared task slot changes while cancellation temporarily drains it.

Source

pub async fn finish( &self, graceful_timeout: Duration, abort_timeout: Duration, ) -> Option<TaskJoinOutcome<T>>

Gracefully joins the task, then aborts and joins it within a second bound.

If another caller holds the drain lock through both bounds, returns TaskJoinOutcome::Incomplete when a task remains owned.

Trait Implementations§

Source§

impl<T: Debug> Debug for SharedTaskSlot<T>

Source§

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

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

impl<T> Default for SharedTaskSlot<T>

Source§

fn default() -> Self

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

impl<T> Drop for SharedTaskSlot<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 SharedTaskSlot<T>

§

impl<T> !RefUnwindSafe for SharedTaskSlot<T>

§

impl<T> !UnwindSafe for SharedTaskSlot<T>

§

impl<T> Send for SharedTaskSlot<T>
where Mutex<RawMutex, SharedTaskState<T>>: Send,

§

impl<T> Sync for SharedTaskSlot<T>
where Mutex<RawMutex, SharedTaskState<T>>: Sync,

§

impl<T> Unpin for SharedTaskSlot<T>
where Mutex<RawMutex, SharedTaskState<T>>: Unpin,

§

impl<T> UnsafeUnpin for SharedTaskSlot<T>
where Mutex<RawMutex, SharedTaskState<T>>: UnsafeUnpin,

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
§

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