tokio_tasks/lib.rs
1//! Task manager for tokio. Facilitates clean shutdow of applications, and async cancelation of tasks
2//!
3//! Example
4//! =======
5//! ```
6//! use tokio_tasks::{TaskBuilder, run_tasks, shutdown, cancelable, RunToken};
7//!
8//! // Main task, program will shut down if when finishes
9//! async fn main_task(run_token: RunToken) -> Result<(), String> {
10//! println!("Main task start");
11//! match cancelable(&run_token, tokio::time::sleep(std::time::Duration::from_secs(10))).await {
12//! Ok(()) => println!("Main task finished"),
13//! Err(_) => println!("Main task cancled"),
14//! }
15//! Ok(())
16//! }
17//!
18//! // Critical task, program will shut down if this finished with an error
19//! async fn critical_task(run_token: RunToken) -> Result<(), String> {
20//! println!("Critical task start");
21//! match cancelable(&run_token, tokio::time::sleep(std::time::Duration::from_secs(1))).await {
22//! Ok(()) => println!("Critical task finished"),
23//! Err(_) => println!("Critical task cancled"),
24//! }
25//! Ok(())
26//! }
27//!
28//! # tokio::runtime::Builder::new_current_thread()
29//! # .enable_all()
30//! # .build()
31//! # .unwrap()
32//! # .block_on(async {
33//! TaskBuilder::new("main_task")
34//! .main()
35//! .shutdown_order(1)
36//! .create(|rt| main_task(rt));
37//!
38//! TaskBuilder::new("critical_task")
39//! .critical()
40//! .shutdown_order(2)
41//! .create(|rt| critical_task(rt));
42//!
43//! // Normally one would register the program to stop on ctrl+c
44//! // tokio::spawn(async {
45//! // tokio::signal::ctrl_c().await.unwrap();
46//! // shutdown("ctrl+c".to_string());
47//! // });
48//!
49//! // We just shut down after a little while
50//! tokio::spawn(async {
51//! tokio::time::sleep(std::time::Duration::from_millis(20)).await;
52//! shutdown("timeout".to_string());
53//! });
54//! run_tasks().await;
55//! # })
56//! ```
57
58mod run_token;
59mod scope_guard;
60mod task;
61
62pub use run_token::RunToken;
63pub use run_token::WaitForCancellationFuture;
64#[cfg(feature = "pause")]
65pub use run_token::WaitForPauseFuture;
66pub use task::BoxFuture;
67pub use task::CancelledError;
68pub use task::FinishState;
69pub use task::Task;
70pub use task::TaskBase;
71pub use task::TaskBuilder;
72pub use task::WaitError;
73pub use task::cancelable;
74#[cfg(feature = "ordered-locks")]
75pub use task::cancelable_checked;
76pub use task::list_tasks;
77pub use task::run_tasks;
78pub use task::shutdown;
79pub use task::try_list_tasks_for;