use std::time::Duration;
use taskvisor::prelude::*;
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let worker: TaskRef = TaskFn::arc("ticker", |ctx| async move {
let mut tick = 0u64;
loop {
match ctx
.run_until_cancelled(tokio::time::sleep(Duration::from_millis(500)))
.await
{
Ok(()) => {
tick += 1;
println!("[ticker] tick #{tick}");
}
Err(canceled) => {
println!("[ticker] shutting down after {tick} ticks");
return Err(canceled); }
}
}
});
let spec = TaskSpec::restartable(worker);
let supervisor = Supervisor::new(SupervisorConfig::default(), vec![]);
supervisor.run(vec![spec]).await?;
Ok(())
}