Skip to main content

LocalExecutor

Struct LocalExecutor 

Source
pub struct LocalExecutor { /* 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

Source

pub fn new( session_id: SessionId, scheduler: Arc<dyn Scheduler>, dispatch: impl Fn(Runnable<RunnableMeta>) + Send + Sync + 'static, ) -> Self

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.

Source

pub fn session_id(&self) -> SessionId

Returns the session this executor runs tasks for.

Source

pub fn scheduler(&self) -> &Arc<dyn Scheduler> ⓘ

Returns the scheduler that this executor’s timers and clock come from.

Source

pub fn is_test(&self) -> bool

Whether this executor runs on a TestScheduler.

Source

pub fn spawn<F>(&self, future: F) -> Task<F::Output> ⓘ
where F: Future + 'static, F::Output: 'static,

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.

Source

pub fn spawn_with_dispatch<F>( &self, future: F, dispatch: impl Fn(Runnable<RunnableMeta>) + Send + Sync + 'static, ) -> Task<F::Output> ⓘ
where F: Future + 'static, F::Output: 'static,

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.

Source

pub fn block_on<Fut: Future>(&self, future: Fut) -> Fut::Output

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.

Source

pub fn block_with_timeout<Fut: Future>( &self, timeout: Duration, future: Fut, ) -> Result<Fut::Output, impl Future<Output = Fut::Output> + use<Fut>>

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.

Source

pub fn timer(&self, duration: Duration) -> Timer ⓘ

Returns a Timer that completes after duration.

Source

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.

Source

pub fn spawn_dedicated<F, Fut>(&self, f: F) -> Task<Fut::Output> ⓘ
where F: FnOnce(LocalExecutor) -> Fut + Send + 'static, Fut: Future + 'static, Fut::Output: Send + Sync + 'static,

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

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V