9个版本

0.2.3 2024年8月8日
0.2.2 2024年5月16日
0.1.5 2024年4月19日
0.1.4 2024年1月16日
0.1.0 2020年12月26日

#165 in 并发

Download history 687/week @ 2024-05-04 3456/week @ 2024-05-11 519/week @ 2024-05-18 4/week @ 2024-05-25 3/week @ 2024-07-20 33/week @ 2024-07-27 89/week @ 2024-08-03 8/week @ 2024-08-10

每月 133 下载量

MIT 许可证

50KB
859 代码行

CircleCI Crates.io Crates.io GitHub last commit Codecov License GitHub issues

⏱️ 用Rust编写的异步任务调度库

关于

tasklet 是一个用Rust编写的任务调度库。它基于 tokio 运行时,并利用绿色线程来异步运行任务。

依赖关系

版本
cron 0.12.1
chrono 0.4.38
time 0.3.36
log 0.4.21
tokio 1.37.0

如何使用此库

在你的 Cargo.toml 中添加

[dependencies]
tasklet = "0.2.3"

示例

更多示例请见 示例 文件夹。

use log::info;
use simple_logger::SimpleLogger;
use tasklet::task::TaskStepStatusErr::Error;
use tasklet::task::TaskStepStatusOk::Success;
use tasklet::{TaskBuilder, TaskScheduler};

/// A simple example of a task with two steps,
/// that might work or fail sometimes.
#[tokio::main]
async fn main() {
    // Init the logger.
    SimpleLogger::new().init().unwrap();

    // A variable to be passed in the task.
    let mut exec_count = 0;

    // Task scheduler with 1000ms loop frequency.
    let mut scheduler = TaskScheduler::default(chrono::Local);

    // Create a task with 2 steps and add it to the scheduler.
    // The second step fails every second execution.
    // Append the task to the scheduler.
    scheduler.add_task(
        TaskBuilder::new(chrono::Local)
            .every("1 * * * * * *")
            .description("A simple task")
            .add_step("Step 1", || {
                info!("Hello from step 1");
                Ok(Success) // Let the scheduler know this step was a success.
            })
            .add_step("Step 2", move || {
                if exec_count % 2 == 0 {
                    exec_count += 1;
                    Err(Error(Some("Oh no this task failed".into()))) // Indicate that this step was a fail.
                } else {
                    info!("Hello from step 2");
                    exec_count += 1;
                    Ok(Success) // Indicate that this step was a success.
                }
            })
            .build(),
    );

    // Execute the scheduler.
    scheduler.run().await;
}

作者

Stavros Grigoriou (stav121)

依赖关系

~6–12MB
~133K SLoC