1个不稳定版本

0.1.0 2022年3月2日

#859异步

每月 26 次下载

MPL-2.0 许可证

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请求。对于主要功能或破坏性更改,请首先打开一个工单或开始一个讨论,这样我们就可以讨论您想做什么。

联系方式

依赖关系

~2MB
~33K SLoC