EmitterHandle

Struct EmitterHandle 

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

Handle for controlling a running emitter task.

§Shutdown Behavior

You must call shutdown().await to stop the emitter task. The handle does not implement Drop to avoid race conditions and resource leaks.

If you drop the handle without calling shutdown(), the background task will continue running indefinitely, potentially causing:

  • Resource leaks (the task holds references to the registry)
  • Unexpected behavior if the task outlives expected lifetime
  • Inability to observe task failures or panics

§Examples

let handle = emitter.start(|_| {}, false);

// Always call shutdown explicitly
handle.shutdown().await.expect("shutdown failed");

Implementations§

Source§

impl EmitterHandle

Source

pub async fn shutdown(self) -> Result<(), ShutdownError>

Trigger graceful shutdown and wait for the task to complete.

This method uses a default timeout of 10 seconds. For custom timeout durations, use shutdown_with_timeout.

§Errors

Returns an error if:

  • The task panics during shutdown
  • The task is cancelled
  • Shutdown exceeds the timeout (10 seconds)
  • The shutdown signal fails to send
§Examples
let handle = emitter.start(|_| {}, false);

// Do some work...

// Clean shutdown with default 10 second timeout
handle.shutdown().await?;
Source

pub async fn shutdown_with_timeout( self, timeout_duration: Duration, ) -> Result<(), ShutdownError>

Trigger graceful shutdown with a custom timeout.

This method:

  1. Sends the shutdown signal
  2. Waits for the background task to finish (up to the timeout)
  3. If the timeout is exceeded, the task is aborted
§Errors

Returns an error if:

  • The task panics during shutdown
  • The task is cancelled
  • Shutdown exceeds the specified timeout
  • The shutdown signal fails to send
§Examples
let handle = emitter.start(|_| {}, false);

// Do some work...

// Clean shutdown with 5 second timeout
handle.shutdown_with_timeout(Duration::from_secs(5)).await?;
Source

pub fn is_running(&self) -> bool

Check if the emitter task is still running.

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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, 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<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