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>
impl<T: Hash + Eq> AbortableList<T>
Sourcepub fn insert<A: Abortable + Send + Sync + 'static>(
&mut self,
process: T,
task: A,
)
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.
Sourcepub fn abort_one(&mut self, process: &T) -> bool
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).
Sourcepub fn extend_from(&mut self, other: AbortableList<T>)
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.
Sourcepub fn flat_map_extend_from<U>(
&mut self,
other: AbortableList<U>,
key_map: impl Fn(U) -> T,
)
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>
impl<T> AbortableList<T>
Sourcepub fn iter_names(&self) -> impl Iterator<Item = &T>
pub fn iter_names(&self) -> impl Iterator<Item = &T>
Returns an iterator over the task names in the insertion order.
Sourcepub fn abort_all(&self)
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>
impl<T> Abortable for AbortableList<T>
Source§fn abort_task(&self)
fn abort_task(&self)
Source§fn was_aborted(&self) -> bool
fn was_aborted(&self) -> bool
Source§impl<T> Default for AbortableList<T>
impl<T> Default for AbortableList<T>
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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