13 releases (5 breaking)

0.6.2 Aug 3, 2024
0.6.0 Jun 15, 2024
0.5.1 Feb 16, 2024
0.1.2 May 30, 2023

#10 in #periodic


Used in spaghettinuum

ISC license

14KB
274 lines

This is a tool for managing asynchronous tasks.

For example, maybe you have some periodic background tasks, plus a couple web servers. Using a TaskManager you can group these and shut them down as a group, gracefully, and wait for them all to end.

Handles

  • Long tasks
  • Simple periodic tasks (fixed sleep between invocations)
  • Async streams
  • Ctrl+c shutdown

Use it like

let tm = TaskManager::new();
tm.attach_sigint({
    log2 = logger.clone();
    |e| log2.err("Error handling sigint", e)
});
let tm1 = tm.clone();
let log2 = logger.clone();
tm.task(async move {
    match tm1.if_alive(server).await {
        Some(r) => match r {
            Ok(_) => {} // Server exited normally
            Err(e) => {
                log.err("Server died with error", e);
            }
        },
        None => {} // Received shutdown
    };
});

tm.join().await;

Dependencies

~8–19MB
~265K SLoC