use events::{AutoResetEvent, ManualResetEvent};
#[tokio::main]
async fn main() {
auto_reset_signal().await;
manual_reset_gate().await;
}
async fn auto_reset_signal() {
let event = AutoResetEvent::boxed();
let setter = event.clone();
tokio::spawn(async move {
setter.set();
});
event.wait().await;
assert!(!event.try_wait());
println!("AutoResetEvent: signal received and consumed.");
}
async fn manual_reset_gate() {
let event = ManualResetEvent::boxed();
let setter = event.clone();
tokio::spawn(async move {
setter.set();
});
event.wait().await;
event.wait().await;
assert!(event.try_wait());
println!("ManualResetEvent: gate opened, all waiters released.");
}