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
類似的結構 目的是讓用直接操作運作中任務産生的任務執行個體。