6 个版本
0.2.1 | 2024年2月27日 |
---|---|
0.2.0 | 2023年12月8日 |
0.1.3 | 2023年9月1日 |
0.1.2 | 2023年1月3日 |
0.1.0 | 2022年10月21日 |
#5 in #down
38KB
880 代码行数,不包括注释
tokio-tasks
tokio 的任务管理
use tokio_tasks::{TaskBuilder, run_tasks, shutdown, cancelable, RunToken};
// Main task, program will shut down if when finishes
async fn main_task(run_token: RunToken) -> Result<(), String> {
println!("Main task start");
match cancelable(&run_token, tokio::time::sleep(std::time::Duration::from_secs(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 critical_task(run_token: RunToken) -> Result<(), String> {
println!("Critical task start");
match cancelable(&run_token, tokio::time::sleep(std::time::Duration::from_secs(1))).await {
Ok(()) => println!("Critical task finished"),
Err(_) => println!("Critical task cancled"),
}
Ok(())
}
#[tokio::main]
async fn main() {
TaskBuilder::new("main_task")
.main()
.shutdown_order(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;
}
依赖项
~2.6–4MB
~61K SLoC