Task managment for tokio
```rust use tokiotasks::{TaskBuilder, runtasks, shutdown, cancelable, RunToken};
// Main task, program will shut down if when finishes async fn maintask(runtoken: RunToken) -> Result<(), String> { println!("Main task start"); match cancelable(&runtoken, tokio::time::sleep(std::time::Duration::fromsecs(10))).await { Ok(()) => println!("Main task finished"), Err(_) => println!("Main task cancled"), } Ok(()) }
// Critical task, program will shut down if this finished with an error async fn criticaltask(runtoken: RunToken) -> Result<(), String> { println!("Critical task start"); match cancelable(&runtoken, tokio::time::sleep(std::time::Duration::fromsecs(1))).await { Ok(()) => println!("Critical task finished"), Err(_) => println!("Critical task cancled"), } Ok(()) }
async fn main() { TaskBuilder::new("maintask") .main() .shutdownorder(1) .create(|rt| main_task(rt));
TaskBuilder::new("critical_task")
.critical()
.shutdown_order(2)
.create(|rt| critical_task(rt));
// Shutdown the application on ctrl+c
tokio::spawn(async {
tokio::signal::ctrl_c().await.unwrap();
shutdown("ctrl+c".to_string());
});
// Run until all tasks stop
run_tasks().await;
} ```