use sigterm::Shutdown;
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() {
let (shutdown, handle) = Shutdown::new();
let worker = tokio::spawn(async move {
println!("Worker started...");
tokio::select! {
_ = async {
loop {
println!("Worker is busy...");
sleep(Duration::from_secs(1)).await;
}
} => {},
_ = shutdown.recv() => {
println!("Worker received shutdown signal!");
}
}
});
sleep(Duration::from_secs(3)).await;
println!("Triggering shutdown...");
handle.shutdown();
let _ = worker.await;
println!("Main exited.");
}