pub trait Task: Send + 'static {
// Required method
fn shutdown(self) -> impl Future<Output = Result<()>> + Send;
}Expand description
A service or resource that can be shut down gracefully.
Implement this trait for every long-running component that needs cleanup on
process exit — HTTP servers, background workers, connection pools, etc.
The run! macro calls Task::shutdown on each registered
task in declaration order after a shutdown signal is received.
§Contract
- Implementors must be
Send + 'staticso they can be moved across threads. shutdownconsumesself— the task cannot be used after shutdown.- Return
Erronly for genuinely unexpected failures; normal teardown should returnOk(()).
Required Methods§
Sourcefn shutdown(self) -> impl Future<Output = Result<()>> + Send
fn shutdown(self) -> impl Future<Output = Result<()>> + Send
Shuts down this task and releases its resources.
Called once by run! after the process receives a
shutdown signal. The future must be Send because it may be awaited on
any Tokio thread.
§Errors
Returns modo::Error only when teardown encounters a
genuinely unexpected failure (for example, a worker panic surfaced via a
join handle). Normal, clean shutdown — including cases where a resource
is already closed — should return Ok(()). An error from one task does
not abort the remaining shutdown sequence in run!; it is
logged at error level and the next task is still invoked.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.