pub struct TaskRunner { /* private fields */ }Expand description
Coalescing + late-drop spine for background tasks (issue #231).
See the module docs for the full contract. The short version: the
App calls Self::request before spawning a worker, branches on
the returned generation, and reports the worker’s result back via
Self::complete so a superseded late result is dropped.
Implementations§
Source§impl TaskRunner
impl TaskRunner
Sourcepub fn new() -> Self
pub fn new() -> Self
Construct an empty runner — no generations claimed, nothing in
flight. The App constructor calls this once.
Sourcepub fn request(&mut self, kind: TaskKind) -> Option<u64>
pub fn request(&mut self, kind: TaskKind) -> Option<u64>
Claim a run of kind. Returns Some(generation) for a cold slot —
the caller owns the off-thread spawn and must tag the worker’s
result with that generation — or None when a run of the same
kind is already in flight (coalesced; no second worker).
Sourcepub fn invalidate(&mut self, kind: TaskKind)
pub fn invalidate(&mut self, kind: TaskKind)
Drop any in-flight run of kind and bump the generation so a late
result is discarded, freeing the slot for a fresh run.
Sourcepub fn invalidate_matching<F: Fn(TaskKind) -> bool>(&mut self, pred: F)
pub fn invalidate_matching<F: Fn(TaskKind) -> bool>(&mut self, pred: F)
Self::invalidate every in-flight kind matching pred (issue #255).
The GitHub fetch needs this because, on navigation, the App clears
the per-key cache for all GitHub fetches but no longer holds the
(stale) issue/PR numbers to invalidate them by key — a
|k| k.is_github() predicate drops every running GitHub worker’s slot
so a fresh fetch starts at a new generation and the stale worker’s late
result is discarded by Self::complete. Only running kinds are
touched: an idle kind has no in-flight worker to drop.
Sourcepub fn complete(&mut self, kind: TaskKind, generation: u64) -> bool
pub fn complete(&mut self, kind: TaskKind, generation: u64) -> bool
Decide whether a result tagged generation for kind is still
authoritative. Returns true (apply it) only when the generation
matches the current one and a run was in flight, clearing the slot;
returns false for a late result whose generation was bumped by an
intervening invalidate / request (the #138 guard).
Sourcepub fn is_loading(&self, kind: TaskKind) -> bool
pub fn is_loading(&self, kind: TaskKind) -> bool
true while a run of kind is in flight.
Sourcepub fn is_any_loading(&self) -> bool
pub fn is_any_loading(&self) -> bool
true while any task is in flight — drives the statusbar spinner
alongside the GitHub fetch’s own loading signal.
Sourcepub fn has_mutating_task_in_flight(&self) -> bool
pub fn has_mutating_task_in_flight(&self) -> bool
true while a mutating worker is still in flight. Quit handling uses
this to keep sync / bootstrap / delete-worktree from being abandoned mid-operation.
Sourcepub fn mutating_loading_label(&self) -> Option<&'static str>
pub fn mutating_loading_label(&self) -> Option<&'static str>
Loader label for a mutating in-flight task, if any.
Sourcepub fn loading_label(&self) -> Option<&'static str>
pub fn loading_label(&self) -> Option<&'static str>
The loader label for an in-flight task, if any. None when nothing
is loading.
Trait Implementations§
Source§impl Debug for TaskRunner
impl Debug for TaskRunner
Source§impl Default for TaskRunner
impl Default for TaskRunner
Source§fn default() -> TaskRunner
fn default() -> TaskRunner
Auto Trait Implementations§
impl Freeze for TaskRunner
impl RefUnwindSafe for TaskRunner
impl Send for TaskRunner
impl Sync for TaskRunner
impl Unpin for TaskRunner
impl UnsafeUnpin for TaskRunner
impl UnwindSafe for TaskRunner
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for 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