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

Use it like

```rust let tm = TaskManager::new(); tm.attachsigint({ log2 = logger.clone(); |e| log2.err("Error handling sigint", e) }); let tm1 = tm.clone(); let log2 = logger.clone(); tm.task(async move { match tm1.ifalive(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; ```