delay-timer
delay-timer是一个基于时间轮算法构建的lib,它可以很方便地管理定时任务,或者周期性地执行任意任务。
轻松打造一个延迟/周期任务的运行容器。可以想象成crontab,但可以处理同步/异步
任务,但支持动态添加/取消/删除,单个任务支持配置任务的最大并行数量,运行时间等。
底层运行时基于的smol和tokio(可选的feature),你可以用其中一个来构建你的应用程序。
v0.3.0 新功能
1.可通过条件编译实现稳定编译。 (最小稳定版本: rustc-stable-1.49.0)
2.平衡性能和用户体验(调整CandyCronStr内的元组类型, 为 TaskBuilder 增加api-free
)。
3.支持自定义调度任务的时区(现默认内置的调度时区是CST, 原来为UTC)。
4.修复调度器在smol-runtime中,内部调度节奏过快的问题。
5.使用next_second_hand来解决调度碰撞的问题。
小例子:
创建一个异步的调度任务,支持如下。
id为1, 捕获上下文share_num_bunshin
并每秒钟调度一次, 并行运行的Future数量3个,总计运行9次。
let share_num = Arc::new(AtomicUsize::new(0));
let share_num_bunshin = share_num.clone();
let body = create_async_fn_body!((share_num_bunshin){
share_num_bunshin_ref.fetch_add(1, Release);
Timer::after(Duration::from_secs(9)).await;
share_num_bunshin_ref.fetch_sub(1, Release);
});
let task = TaskBuilder::default()
.set_frequency_by_candy(CandyFrequency::CountDown(9, CandyCron::Secondly))
.set_task_id(1)
.set_maximun_parallel_runable_num(3)
.spawn(body)
.unwrap();
在未来的v0.4.0版本中, api-DelayTimer::add_task
可能会有一些调整, 增加返回值 JoinHandle
类似的结构
目的是让用直接操作运行中任务产生的任务实例。
希望针对api的设计与改动,大家能提出宝贵的意见。 谢谢大家:) .
// Here is an expected implementation for DelayTimer::add_task , which is not yet determined.
**Do you have a better opinion?**
let delay_timer = DelayTimer::default();
let join_handle = delay_timer.add_task(_).unwrap();
let peek : Option<Peek<&Instance>> = join_handle.peek().await;
let peek : Result<Option<Peek<&Instance>>> join_handle.try_peek();
let instance : Option<Intance> = join_handle.next().await.unwrap();
let instance : Result<Option<Intance>> = join_handle.try_next().unwrap();
instance.cancel();
评论区
写评论还没有评论