Skip to main content

TaskPool

Struct TaskPool 

Source
pub struct TaskPool<K, T>
where T: Send + 'static,
{ /* private fields */ }
Expand description

A keyed pool of async tasks with lifecycle status tracking.

Each key maps to at most one running task. Spawning under an existing key aborts the previous task. Status transitions (Pending, Resolved, Error, Aborted) are reported via the on_status_change callback provided at construction time.

§Type parameters

  • K: Key type (must be Hash + Eq + Clone).
  • T: Task output type.

Implementations§

Source§

impl<K, T> TaskPool<K, T>
where K: Hash + Eq + Clone + Send + 'static, T: Send + 'static,

Source

pub fn new( rt: Handle, on_status_change: impl Fn(&K, TaskStatus<T>) + Send + Sync + 'static, ) -> Self

Create a new task pool.

on_status_change is called whenever a task’s status transitions (Pending, Resolved, Error, Aborted). The caller provides a closure that updates state (e.g., a HashMap in their DomainData).

Source

pub fn spawn<F, Fut>(&self, key: K, f: F)
where F: FnOnce() -> Fut + Send + 'static, Fut: Future<Output = T> + Send + 'static,

Spawn a task under the given key.

Aborts any previous task with the same key. Sets status to Pending, then Resolved on completion. If the task panics, the status remains Pending (the panic is caught by tokio but the callback is not reached).

Source

pub fn abort(&self, key: &K) -> bool

Abort the task under the given key.

Returns true if a task was found and aborted. Sets status to Aborted via on_status_change.

Source

pub async fn shutdown(&self, timeout: Duration)

Gracefully shut down all tasks.

Awaits each JoinHandle with a deadline; force-aborts tasks that don’t finish within timeout.

Trait Implementations§

Source§

impl<K: Clone, T> Clone for TaskPool<K, T>
where T: Send + 'static + Clone,

Source§

fn clone(&self) -> TaskPool<K, T>

Returns a duplicate 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<K, T> Debug for TaskPool<K, T>
where T: Send + 'static,

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<K, T> Freeze for TaskPool<K, T>

§

impl<K, T> !RefUnwindSafe for TaskPool<K, T>

§

impl<K, T> Send for TaskPool<K, T>
where K: Send,

§

impl<K, T> Sync for TaskPool<K, T>
where K: Send,

§

impl<K, T> Unpin for TaskPool<K, T>

§

impl<K, T> UnsafeUnpin for TaskPool<K, T>

§

impl<K, T> !UnwindSafe for TaskPool<K, T>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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,

Source§

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

Source§

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

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.