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;