Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/andrewbaxter/taskmanager

Rust background task group manager
https://github.com/andrewbaxter/taskmanager

Last synced: about 23 hours ago
JSON representation

Rust background task group manager

Awesome Lists containing this project

README

        

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

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