Open 0xMimir opened 1 year ago
On tokio-cron-scheduler there is example bellow
use tokio_cron_scheduler::{JobScheduler, JobToRun, Job}; #[tokio::main] async fn main() { let mut sched = JobScheduler::new().await; sched.add(Job::new("1/10 * * * * *", |uuid, l| { println!("I run every 10 seconds"); }).await.unwrap()); sched.add(Job::new_async("1/7 * * * * *", |uuid, mut l| Box::pin( async { println!("I run async every 7 seconds"); let next_tick = l.next_tick_for_job(uuid).await; match next_tick { Ok(Some(ts)) => info!("Next time for 7s is {:?}", ts), _ => warn!("Could not get next tick for 7s job"), } })).await.unwrap()); sched.add(Job::new("1/30 * * * * *", |uuid, l| { println!("I run every 30 seconds"); }).await.unwrap()); sched.add( Job::new_one_shot(Duration::from_secs(18), |_uuid, _l| { println!("{:?} I'm only run once", chrono::Utc::now()); }).unwrap() ).await; let mut jj = Job::new_repeated(Duration::from_secs(8), |_uuid, _l| { println!("{:?} I'm repeated every 8 seconds", chrono::Utc::now()); }).unwrap(); jj.on_start_notification_add(&sched, Box::new(|job_id, notification_id, type_of_notification| { Box::pin(async move { println!("Job {:?} was started, notification {:?} ran ({:?})", job_id, notification_id, type_of_notification); }) })).await; jj.on_stop_notification_add(&sched, Box::new(|job_id, notification_id, type_of_notification| { Box::pin(async move { println!("Job {:?} was completed, notification {:?} ran ({:?})", job_id, notification_id, type_of_notification); }) })).await; jj.on_removed_notification_add(&sched, Box::new(|job_id, notification_id, type_of_notification| { Box::pin(async move { println!("Job {:?} was removed, notification {:?} ran ({:?})", job_id, notification_id, type_of_notification); }) })).await; sched.add(jj).await; let five_s_job = Job::new("1/5 * * * * *", |_uuid, _l| { println!("{:?} I run every 5 seconds", chrono::Utc::now()); }) .unwrap(); sched.add(five_s_job).await; let four_s_job_async = Job::new_async("1/4 * * * * *", |_uuid, _l| Box::pin(async move { println!("{:?} I run async every 4 seconds", chrono::Utc::now()); })).unwrap(); sched.add(four_s_job_async).await; sched.add( Job::new("1/30 * * * * *", |_uuid, _l| { println!("{:?} I run every 30 seconds", chrono::Utc::now()); }) .unwrap(), ).await; sched.add( Job::new_one_shot(Duration::from_secs(18), |_uuid, _l| { println!("{:?} I'm only run once", chrono::Utc::now()); }).unwrap() ).await; sched.add( Job::new_one_shot_async(Duration::from_secs(16), |_uuid, _l| Box::pin( async move { println!("{:?} I'm only run once async", chrono::Utc::now()); })).unwrap() ).await; let jj = Job::new_repeated(Duration::from_secs(8), |_uuid, _l| { println!("{:?} I'm repeated every 8 seconds", chrono::Utc::now()); }).unwrap(); sched.add(jj).await; let jja = Job::new_repeated_async(Duration::from_secs(7), |_uuid, _l| Box::pin(async move { println!("{:?} I'm repeated async every 7 seconds", chrono::Utc::now()); })).unwrap(); sched.add(jja).await; #[cfg(feature = "signal")] sched.shutdown_on_ctrl_c(); sched.set_shutdown_handler(Box::new(|| { Box::pin(async move { println!("Shut down done"); }) })); sched.start().await; // Wait a while so that the jobs actually run tokio::time::sleep(core::time::Duration::from_secs(100)).await; }
This code doesn't compile do to JobScheduler::new().await;, and few more changes.
JobScheduler::new().await;
On tokio-cron-scheduler there is example bellow
This code doesn't compile do to
JobScheduler::new().await;
, and few more changes.