1个不稳定版本
0.1.0 | 2022年3月2日 |
---|
#859 在 异步
每月 26 次下载
13KB
125 行
简单任务调度器
安排重复任务异步运行。
这不是一个精确的调度器;任务可能不会(很可能不会)在您设置的精确间隔内运行。
有用链接
simple_scheduler
使用 futures
crate 提供的执行器。如果您需要或更喜欢另一个执行器,我会接受可选使用它的PR。
为什么还需要另一个任务调度器?当我查看可用的内容时,我发现所有东西都使用了 cron 表达式(我不想在库API中使用),没有异步运行任务,并且/或者需要 tokio,而我并没有使用。
use simple_scheduler::{
// Also exports chrono::DateTime<chrono::Utc> as DateTime.
Duration, Time,
Schedule, ScheduleAt, ScheduledTask, task,
};
use chrono::Utc;
fn main() {
let periodic_task = ScheduledTask::new(
ScheduleAt::Interval(Duration::seconds(4)),
task!(async { println!("Do something every four seconds") })
).unwrap();
let onetime_task = ScheduledTask::new(
ScheduleAt::DateTime(Utc::now() + Duration::seconds(15)),
task!(task2())
).unwrap();
let daily_task = ScheduledTask::new(
ScheduleAt::Daily(Time::from_hms(01, 23, 45)),
task!(async { println!("Hello"); })
).unwrap();
let schedule = Schedule::builder()
.tasks([
periodic_task,
onetime_task,
daily_task,
])
.wake_interval(Duration::seconds(1)).unwrap()
.build();
schedule.run();
// run() exits immediately, so we need to wait a bit.
std::thread::sleep(Duration::seconds(30).to_std().unwrap());
}
async fn task2() {
println!("Function executed");
}
我使用这个来在服务器上运行维护任务;我随意设置了最小的 wake_interval
为 100 纳秒;我没有在该快速周期测试过,也没有测试是否有更低的限制是有意义的。
许可证
所有库源代码均在 MPL 2.0 许可证 的条款下授权。
示例代码的源代码在 MIT 许可证 的条款下授权。
贡献
欢迎补丁和pull请求。对于主要功能或破坏性更改,请首先打开一个工单或开始一个讨论,这样我们就可以讨论您想做什么。
联系方式
- 电子邮件: [email protected]
- 网站: www.ryanjframe.com
- diaspora*: [email protected]
相关项目
依赖关系
~2MB
~33K SLoC