use sigterm::{CancellationToken, ShutdownGuard};
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() {
let token = CancellationToken::new();
let child_token = token.child_token();
tokio::spawn(async move {
println!("Worker waiting for cancellation...");
child_token.cancelled().await;
println!("Worker cancelled!");
});
{
let _guard = ShutdownGuard::new(token);
println!("Doing some work inside a scope...");
sleep(Duration::from_millis(500)).await;
println!("Leaving scope (guard will drop)...");
}
sleep(Duration::from_millis(100)).await;
println!("Main exited.");
}