Skip to main content

Crate task_supervisor

Crate task_supervisor 

Source
Expand description

§task-supervisor

Crates.io Docs.rs

task-supervisor helps you keep Tokio tasks alive. It watches each task, restarts it if it crashes or stops responding, and lets you add, restart, or kill tasks at runtime.

§Install

cargo add task-supervisor

§Quick example

use task_supervisor::{SupervisorBuilder, SupervisedTask, TaskResult};

#[derive(Clone)]
struct Printer;

impl SupervisedTask for Printer {
    async fn run(&mut self) -> TaskResult {
        println!("hello");
        Ok(())
    }
}

#[tokio::main]
async fn main() {
    let supervisor = SupervisorBuilder::default()
        .with_task("printer", Printer)
        .build()
        .run();

    supervisor.wait().await.unwrap();   // wait until every task finishes or is killed
}

§What you get

  • Automatic restarts – failed tasks are relaunched with exponential back-off.
  • Dynamic control – add, restart, kill, or query tasks at runtime through a SupervisorHandle.
  • Configurable – health-check interval, restart limits, back-off, dead-task threshold.

§Usage

Build a supervisor with SupervisorBuilder, call .build() to get a Supervisor, then .run() to start it. This returns a SupervisorHandle you use to control things at runtime:

MethodDescription
wait().awaitBlock until the supervisor exits
add_task(name, task)Register and start a new task
restart(name)Force-restart a task
kill_task(name)Stop a task permanently
get_task_status(name).awaitGet a task’s TaskStatus
get_all_task_statuses().awaitGet every task’s status
shutdown()Stop all tasks and exit

The handle auto-shuts down the supervisor when all clones are dropped.

§Clone and restart behaviour

Every task must implement Clone. The supervisor stores the original instance and clones it each time the task is started or restarted. Mutations made through &mut self in SupervisedTask::run only affect the running clone and are lost on restart.

To share state across restarts, wrap it in an Arc (e.g. Arc<AtomicUsize>). Plain owned fields will always start from their original value. See the SupervisedTask docs for a full example.

§License

MIT

Structs§

Supervisor
SupervisorBuilder
Builds a Supervisor with configurable parameters.
SupervisorHandle
Handle to interact with a running Supervisor. Cheap to clone.

Enums§

SupervisorError
SupervisorHandleError
TaskStatus

Traits§

SupervisedTask
The trait users implement for tasks managed by the supervisor.

Type Aliases§

TaskError
TaskName
TaskResult