sigterm 0.3.10

Signal-aware async control and cancellation primitives for Tokio.
Documentation
/* examples/shutdown.rs */

use sigterm::Shutdown;
use std::time::Duration;
use tokio::time::sleep;

#[tokio::main]
async fn main() {
	let (shutdown, handle) = Shutdown::new();

	// Spawn a worker task
	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!");
				}
		}
	});

	// Simulate some work
	sleep(Duration::from_secs(3)).await;

	println!("Triggering shutdown...");
	handle.shutdown();

	// Wait for worker to finish
	let _ = worker.await;
	println!("Main exited.");
}