use std::{
sync::Arc,
time::{Duration, Instant},
};
use rand::Rng;
use set_timeout::TimeoutScheduler;
#[tokio::main]
async fn main() {
let scheduler = Arc::new(TimeoutScheduler::new(None));
for _ in 0..10 {
let scheduler = Arc::clone(&scheduler);
tokio::spawn(async move {
let start = Instant::now();
let delay = Duration::from_millis(rand::thread_rng().gen_range(100..=1000));
scheduler.set_timeout(delay, async move {
println!(
"desired delay: {:?}, actual delay: {:?}",
delay,
start.elapsed()
);
})
});
}
tokio::time::sleep(Duration::from_secs(2)).await;
}