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