AbortableList

Struct AbortableList 

Source
pub struct AbortableList<T>(/* private fields */);
Expand description

List of Abortable tasks with each task identified by a unique key of type T.

Abortable objects, such as join or abort handles, do not by design abort when dropped. Sometimes this behavior is not desirable, and spawned run-away tasks may still continue to live e.g.: after an error is raised.

This object allows safely managing abortable tasks and will terminate all the tasks in reverse insertion order once dropped.

Additionally, this object also implements Abortable allowing it to be arbitrarily nested.

Implementations§

Source§

impl<T: Hash + Eq> AbortableList<T>

Source

pub fn insert<A: Abortable + Send + Sync + 'static>( &mut self, process: T, task: A, )

Appends a new abortable task to the end of this list.

Source

pub fn abort_one(&mut self, process: &T) -> bool

Looks up a task by its key, removes it and aborts it.

Returns true if the task was aborted and removed. Otherwise, returns false (including a situation when the task was present but already aborted).

Source

pub fn extend_from(&mut self, other: AbortableList<T>)

Extends this list by appending other.

The tasks from other are moved to this list without aborting them. Afterward, other will be empty.

Source

pub fn flat_map_extend_from<U>( &mut self, other: AbortableList<U>, key_map: impl Fn(U) -> T, )

Extends this list by appending other while mapping its keys to the ones in this list.

The tasks from other are moved to this list without aborting them. Afterward, other will be empty.

Source§

impl<T> AbortableList<T>

Source

pub fn is_empty(&self) -> bool

Checks if the list is empty.

Source

pub fn size(&self) -> usize

Returns the number of abortable tasks in the list.

Source

pub fn iter_names(&self) -> impl Iterator<Item = &T>

Returns an iterator over the task names in the insertion order.

Source

pub fn abort_all(&self)

Aborts all tasks in this list in the reverse insertion order.

Skips tasks which were already aborted.

Trait Implementations§

Source§

impl<T> Abortable for AbortableList<T>

Source§

fn abort_task(&self)

Notifies the task that it should abort. Read more
Source§

fn was_aborted(&self) -> bool

Returns true if abort_task was already called or the task has finished. Read more
Source§

impl<T> Default for AbortableList<T>

Source§

fn default() -> Self

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

impl<T> Drop for AbortableList<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<T> Freeze for AbortableList<T>

§

impl<T> !RefUnwindSafe for AbortableList<T>

§

impl<T> Send for AbortableList<T>
where T: Send,

§

impl<T> Sync for AbortableList<T>
where T: Sync,

§

impl<T> Unpin for AbortableList<T>
where T: Unpin,

§

impl<T> !UnwindSafe for AbortableList<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> 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> 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> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.