天天看點

【大家的項目】周期任務lib(delay-timer)v0.3.0 釋出

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​

​ 類似的結構 目的是讓用直接操作運作中任務産生的任務執行個體。

repo: delay-timer

​​https://github.com/BinChengZhao/delay-timer​​

繼續閱讀