pub enum ReadOutcome<T> {
Value(T),
Scheduled(EventListener),
InProgress(EventListener),
}Expand description
What a read of a task’s output or cell found.
The two “not available yet” cases are distinguished because the reader can act on them differently: a task that is only scheduled can be taken over and executed by the reader, while one that some worker is already executing can only be waited for — and finding that out without taking the scheduler’s queue lock is the point of telling them apart.
The state is a hint: it is a snapshot, and a task can be picked up by a worker right after the read looked (a worker even pops a task off the queue before it marks it as started). Acting on a stale hint costs at most a failed claim, never correctness.
Variants§
Value(T)
The value is available.
Scheduled(EventListener)
The task is queued but no worker has started it, so the reader may take it out of the queue and execute it itself. The listener fires when the task is done.
InProgress(EventListener)
A worker is already executing the task; there is nothing to take over. The listener fires when the task is done.
Auto Trait Implementations§
impl<T> Freeze for ReadOutcome<T>where
T: Freeze,
impl<T> RefUnwindSafe for ReadOutcome<T>where
T: RefUnwindSafe,
impl<T> Send for ReadOutcome<T>where
T: Send,
impl<T> Sync for ReadOutcome<T>where
T: Sync,
impl<T> Unpin for ReadOutcome<T>where
T: Unpin,
impl<T> UnsafeUnpin for ReadOutcome<T>where
T: UnsafeUnpin,
impl<T> UnwindSafe for ReadOutcome<T>where
T: UnwindSafe,
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
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