#![allow(deprecated)]
use anyhow::Result;
use delay_timer::prelude::*;
use delay_timer::utils::convenience::functions::unblock_process_task_fn;
use smol::Timer;
use std::time::Duration;
use tracing::{info, Level};
use tracing_subscriber::FmtSubscriber;
#[async_std::main]
async fn main() -> Result<()> {
FmtSubscriber::builder()
.with_max_level(Level::DEBUG)
.init();
let delay_timer = DelayTimerBuilder::default()
.smol_runtime_by_default()
.build();
for i in 0..1000 {
delay_timer.add_task(build_task_async_execute_process(i)?)?;
}
info!("==== All job is be init! ====");
for _ in 0..300 {
Timer::after(Duration::from_secs(60)).await;
}
Ok(delay_timer.stop_delay_timer()?)
}
fn build_task_async_execute_process(task_id: u64) -> Result<Task, TaskError> {
let mut task_builder = TaskBuilder::default();
let body = move || unblock_process_task_fn("echo hello".into(), task_id);
task_builder
.set_frequency_by_candy(CandyFrequency::Repeated(CandyCron::Secondly))
.set_task_id(task_id)
.set_maximum_running_time(2)
.set_maximum_parallel_runnable_num(1)
.spawn_async_routine(body)
}