use events::{LocalAutoResetEvent, LocalManualResetEvent};
#[tokio::main(flavor = "current_thread")]
async fn main() {
let local = tokio::task::LocalSet::new();
local
.run_until(async {
local_auto_reset().await;
local_manual_reset().await;
})
.await;
}
async fn local_auto_reset() {
let event = LocalAutoResetEvent::boxed();
let setter = event.clone();
let worker = tokio::task::spawn_local(async move {
setter.set();
});
event.wait().await;
assert!(!event.try_wait());
worker.await.expect("task did not panic");
println!("LocalAutoResetEvent: signal consumed on single thread.");
}
async fn local_manual_reset() {
let event = LocalManualResetEvent::boxed();
let setter = event.clone();
let worker = tokio::task::spawn_local(async move {
setter.set();
});
event.wait().await;
assert!(event.try_wait());
event.wait().await;
event.reset();
assert!(!event.try_wait());
worker.await.expect("task did not panic");
println!("LocalManualResetEvent: gate opened, verified, and reset.");
}