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; ```