pub struct SchedulerLocalExecutor { /* private fields */ }Expand description
An executor for one session, for futures that are not Send.
Tasks spawned on a LocalExecutor run in order on whichever thread drains
the dispatch destination it was built with. That is the main thread for the
default session, or a dedicated thread for a session created with
LocalExecutor::spawn_dedicated. Futures spawned here are polled and
dropped on the thread that spawned them.
Implementations§
Source§impl LocalExecutor
impl LocalExecutor
Sourcepub fn new(
session_id: SessionId,
scheduler: Arc<dyn Scheduler>,
dispatch: impl Fn(Runnable<RunnableMeta>) + Send + Sync + 'static,
) -> LocalExecutor
pub fn new( session_id: SessionId, scheduler: Arc<dyn Scheduler>, dispatch: impl Fn(Runnable<RunnableMeta>) + Send + Sync + 'static, ) -> LocalExecutor
Creates a local executor for session_id that sends each spawned task’s
runnables to dispatch.
For the default session, dispatch usually calls
Scheduler::schedule_local. The dedicated-session path passes a
closure that sends to the dedicated thread’s channel. scheduler gives
the executor access to clocks, timers and the other scheduler services.
Sourcepub fn session_id(&self) -> SessionId
pub fn session_id(&self) -> SessionId
Returns the session this executor runs tasks for.
Sourcepub fn scheduler(&self) -> &Arc<dyn Scheduler> ⓘ
pub fn scheduler(&self) -> &Arc<dyn Scheduler> ⓘ
Returns the scheduler that this executor’s timers and clock come from.
Sourcepub fn spawn<F>(&self, future: F) -> Task<<F as Future>::Output> ⓘ
pub fn spawn<F>(&self, future: F) -> Task<<F as Future>::Output> ⓘ
Spawns a future on this session and returns a Task for its output.
The future doesn’t need to be Send. It is polled on the thread that
spawned it, so it runs on the session’s thread when called from there.
Dropping the returned task cancels the future; call Task::detach to
let it run to completion instead.
Sourcepub fn spawn_with_dispatch<F>(
&self,
future: F,
dispatch: impl Fn(Runnable<RunnableMeta>) + Send + Sync + 'static,
) -> Task<<F as Future>::Output> ⓘ
pub fn spawn_with_dispatch<F>( &self, future: F, dispatch: impl Fn(Runnable<RunnableMeta>) + Send + Sync + 'static, ) -> Task<<F as Future>::Output> ⓘ
Like Self::spawn, but sends the task’s runnables to dispatch
instead of this executor’s own destination.
dispatch must deliver runnables back to this executor’s thread. The
future is polled and dropped on the thread that spawned it.
Sourcepub fn block_on<Fut>(&self, future: Fut) -> <Fut as Future>::Outputwhere
Fut: Future,
pub fn block_on<Fut>(&self, future: Fut) -> <Fut as Future>::Outputwhere
Fut: Future,
Blocks the current thread until future completes, and returns its output.
Use this where async code can’t be used, such as a test or the entry point of a session. Not available on wasm, where the main thread can’t block.
§Panics
Panics if the scheduler stops before future completes, for example
because future waits on work that can never run.
Sourcepub fn block_with_timeout<Fut>(
&self,
timeout: Duration,
future: Fut,
) -> Result<<Fut as Future>::Output, impl Future<Output = <Fut as Future>::Output> + use<Fut>>where
Fut: Future,
pub fn block_with_timeout<Fut>(
&self,
timeout: Duration,
future: Fut,
) -> Result<<Fut as Future>::Output, impl Future<Output = <Fut as Future>::Output> + use<Fut>>where
Fut: Future,
Blocks the current thread until future completes or timeout elapses.
Returns Ok with the output if the future completed in time. On timeout
it returns Err with the unfinished future. Await that future later to
keep waiting, or drop it to cancel the work. The future may already have
run part of its work.
Sourcepub fn timer(&self, duration: Duration) -> Timer ⓘ
pub fn timer(&self, duration: Duration) -> Timer ⓘ
Returns a Timer that completes after duration.
Sourcepub fn now(&self) -> Instant
pub fn now(&self) -> Instant
Returns the current time from this scheduler’s clock.
Under the test scheduler this is the simulated clock, which moves only when the test advances it.
Sourcepub fn spawn_dedicated<F, Fut>(&self, f: F) -> Task<<Fut as Future>::Output> ⓘ
pub fn spawn_dedicated<F, Fut>(&self, f: F) -> Task<<Fut as Future>::Output> ⓘ
Spawns a closure on a new session that has its own LocalExecutor.
The closure runs on a new OS thread under the platform scheduler, or
on the test scheduler’s loop under TestScheduler. Its future can use
the executor it receives to spawn more work on that thread.
The returned task is the closure’s work. Dropping it cancels the work,
awaiting it yields the closure’s return value, and Task::detach
lets the work run on after the caller is done with it.
Trait Implementations§
Source§impl Clone for LocalExecutor
impl Clone for LocalExecutor
Source§fn clone(&self) -> LocalExecutor
fn clone(&self) -> LocalExecutor
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for LocalExecutor
impl !Send for LocalExecutor
impl !Sync for LocalExecutor
impl !UnwindSafe for LocalExecutor
impl Freeze for LocalExecutor
impl Unpin for LocalExecutor
impl UnsafeUnpin for LocalExecutor
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
Source§type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
Source§fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T, C> ComponentsInto<C> for T
impl<T, C> ComponentsInto<C> for T
Source§fn components_into(self) -> C
fn components_into(self) -> C
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
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 moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more