tokio-task-supervisor 0.1.1

Tokio TaskTracker with built-in cancellation token management and coordinated shutdown.
Documentation
use std::time::Duration;

use tokio_task_supervisor::{CancelOutcome, TaskSupervisor};

#[tokio::main(flavor = "current_thread")]
async fn main() {
    let supervisor = TaskSupervisor::new();

    let background = supervisor.spawn_with_cancel(|| async {
        println!("job: starting slow work");
        tokio::time::sleep(Duration::from_secs(5)).await;
        println!("job: finished slow work");
        "all done"
    });

    let _ = supervisor.spawn_with_token(move |_token| async move {
        tokio::time::sleep(Duration::from_secs(1)).await;
        println!("canceller: requesting shutdown");
        match background.await.expect("spawn failed") {
            CancelOutcome::Completed(msg) => println!("job completed: {msg}"),
            CancelOutcome::Cancelled => println!("job cancelled before completion"),
        }
    });

    println!("main: shutting down");
    supervisor.shutdown().await;
    println!("main: shutdown finished");
}