SupervisorHandle

Struct SupervisorHandle 

Source
pub struct SupervisorHandle { /* private fields */ }
Expand description

A handle for spawning dynamic children on a running Supervisor.

Obtained from Supervisor::handle. Handles are cheap to clone and can be shared across tasks.

Spawning is synchronous and infallible, in the spirit of tokio::spawn: the child is queued for the running supervisor and the call returns immediately with the child’s ChildId. Also as with tokio::spawn, being accepted is not a promise of being run – if the supervisor isn’t running, or shuts down before it gets to the queued child, the child is never started at all.

§Ambient spawning

Code running under supervision usually doesn’t need a handle at all: spawn targets the supervisor of whatever process is currently running. Use a handle when spawning from outside supervision, or when targeting a supervisor other than the ambient one. scope bridges the two by making a handle the ambient supervisor for a future.

Implementations§

Source§

impl SupervisorHandle

Source

pub fn name(&self) -> &str

Returns the name of the supervisor this handle refers to.

Source

pub fn spawn<S, T>(&self, child: T) -> ChildId

Spawns a new dynamic child.

Accepts anything Supervisor::add_worker accepts: a bare Supervisable, a Supervisor to run as a nested supervision subtree, or a ChildSpecification configured in detail.

Unless ChildBuilder says otherwise, dynamic children are temporary: they aren’t restarted when they die, and they aren’t restored when the supervisor itself restarts. That suits short-lived, non-critical work that still wants structured concurrency – the child is stopped when the supervisor is restarted or terminated.

The returned ChildId identifies the child for the lifetime of the supervisor run. The child is queued rather than started synchronously, so it may not have begun running by the time this returns; if the supervisor isn’t running, or shuts down before reaching the child, it never runs at all.

Source

pub fn is_running(&self) -> bool

Returns whether the supervisor is currently running.

Source

pub fn active_children(&self) -> usize

Returns the number of dynamic children currently running under the supervisor.

Counts children the supervisor has actually started, so a child that has been spawned but not yet picked up isn’t included yet.

Source§

impl SupervisorHandle

Source

pub fn scope<F>(&self, fut: F) -> TaskLocalFuture<SupervisorHandle, F>
where F: Future,

Runs fut with this supervisor installed as the ambient supervisor.

Anything fut spawns through spawn becomes a child of this supervisor. Supervised processes already have their own supervisor installed, so this is for code that runs outside supervision – a test driving a component directly, or a task started with tokio::spawn that needs to attach children to a known supervisor.

The ambient supervisor applies only for the duration of fut, and shadows any supervisor already installed.

Source§

impl SupervisorHandle

Source

pub fn worker<N, Fut>(&self, name: N, fut: Fut) -> ChildBuilder<'_>
where N: Into<String>, Fut: Future + Send + 'static, Fut::Output: IntoWorkerResult,

Creates a builder for a child task built from a plain future.

The task runs until it reaches its own terminal condition; it is never handed the shutdown signal. See FnWorker for what that means at shutdown, and for the two cases that need something else.

Use this method when advanced configuration of the underlying task is required. Otherwise, prefer spawn_worker.

§Examples
supervisor.worker("encoder", encode()).on_runtime(pool).spawn();
Source

pub fn supervisable<T>(&self, worker: T) -> ChildBuilder<'_, Restartable>
where T: Supervisable + 'static,

Creates a builder for a supervisable child task.

Supervisable tasks are those where the worker already implements Supervisable, which lets the builder serve as a consistent control surface for spawning both arbitrary asynchronous functions and more full-fledged workers.

Supervisable tasks are set to permanently restart by default.

Use this method when advanced configuration of the underlying task is required. Otherwise, prefer spawn_supervisable.

Source

pub fn spawn_worker<N, Fut>(&self, name: N, fut: Fut) -> ChildId
where N: Into<String>, Fut: Future + Send + 'static, Fut::Output: IntoWorkerResult,

Spawns a child task built from a plain future.

The task runs until it reaches its own terminal condition; it is never handed the shutdown signal. See FnWorker for what that means at shutdown, and for the two cases that need something else.

Use worker when advanced configuration of the underlying task is required.

Source

pub fn spawn_supervisable<T>(&self, worker: T) -> ChildId
where T: Supervisable + 'static,

Spawns a supervisable child task.

Supervisable tasks are those where the worker already implements Supervisable, which lets the builder serve as a consistent control surface for spawning both arbitrary asynchronous functions and more full-fledged workers.

Use supervisable when advanced configuration of the underlying task is required.

Source

pub fn nested_supervisor( &self, supervisor: Supervisor, ) -> NestedSupervisorBuilder<'_>

Creates a builder for a nested supervisor.

A Supervisor can be handed to spawn or Supervisor::add_worker directly, which is all most callers need. This builder exists for the settings that aren’t reachable that way: the restart policy and significance. It matters most for a dynamically spawned subtree, which would otherwise be temporary and so quietly stay dead once it terminated.

Unlike supervisable, there is no placement or shutdown setting. A nested supervisor runs wherever its parent does and its children carry their own placement, and it bounds its own drain through those children rather than through a deadline imposed from above.

Nested supervisors are set to permanently restart by default.

Trait Implementations§

Source§

impl Clone for SupervisorHandle

Source§

fn clone(&self) -> SupervisorHandle

Returns a duplicate of the value. Read more
1.0.0 · 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<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> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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
§

impl<T> Track for T

§

fn track_resources(self, token: ResourceGroupToken) -> Tracked<Self>

Instruments this type by attaching the given resource group token, returning a Tracked wrapper. Read more
§

fn in_current_resource_group(self) -> Tracked<Self>

Instruments this type by attaching the current resource group, returning a Tracked wrapper. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> CloneAny for T
where T: Any + Clone,