# Shutdown Async [github](https://github.com/wcygan/shutdown-async) [crates.io](https://crates.io/crates/shutdown-async) [docs.rs](https://docs.rs/shutdown-async) [build status](https://github.com/wcygan/shutdown-async/actions?query=branch%3Amain) [![codecov](https://codecov.io/gh/wcygan/shutdown-async/branch/main/graph/badge.svg?token=AGLZ67JA6D)](https://codecov.io/gh/wcygan/shutdown-async) A library for gracefully shutting down asynchronous applications This may be useful when you want to allow all in-flight processing to complete before shutting down in order to maintain a consistent state. # Usage Add this to your Cargo.toml: ```toml [dependencies] shutdown-async = "0.1.1" ``` You can use the library like so: ```rust use shutdown_async::ShutdownController; #[tokio::main] async fn main() { let shutdown = ShutdownController::new(); tokio::task::spawn({ let mut monitor = shutdown.subscribe(); async move { // Wait for something to happen tokio::select! { _ = monitor.recv() => { println!("shutdown initiated"); } _ = tokio::time::sleep(ONE_YEAR) => { println!("one year has passed!"); } } } }); shutdown.shutdown().await; } static ONE_YEAR: std::time::Duration = std::time::Duration::from_secs(60 * 60 * 24 * 365); ```