delay-timer

周期任务lib
授权协议 MIT
开发语言 Rust
所属分类 企业应用、 任务/项目管理
软件类型 开源软件
地区 国产
投 递 者 欧阳德运
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

delay-timer是一个基于时间轮算法构建的lib,它可以很方便地管理定时任务,或者周期性地执行任意任务。

轻松打造一个延迟/周期任务的运行容器。可以想象成crontab,但可以处理同步/异步任务,但支持动态添加/取消/删除/更新,
单个任务支持配置任务的最大并行数量,运行时间等。

底层运行时基于的smol和tokio(可选的feature),你可以用其中一个来构建你的应用程序。


v0.4.0 新功能:
    1.支持动态的修改运行中的任务。
    2.支持了insert任务后获取句柄`TaskInstancesChain`,可以动态获取运行中的任务实例`TaskInstance`。
      2.1. 运行中任务的任务实例可以动态取消。
      2.2. 取消分为三种方式:同步阻塞取消、超时限制取消、异步取消。
      2.3. 支持读取运行中任务的运行状态。
    3.支持获取内部异步子任务进程的输出。

更新依赖:

    替换 waitmap -> dashmap .
    升级 cron_clock .

更新examples:

    增加,async-std & tokio 使用案例。
    增加,动态取消运行中任务实例案例。

丰富了文档。


小例子:
创建一个异步的调度任务,支持如下。
任务描述: 每秒运行一次、只运行9次、最大并行运行数3、唯一id为:1.

``` rust

let body = create_async_fn_body!({
    // do something.
});

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)?;


```

async-std 中的应用 :

``` rust

#[async_std::main]
async fn main() -> Result<()> {
    // Build an DelayTimer that uses the default configuration of the Smol runtime internally.
    let delay_timer = DelayTimerBuilder::default().build();

    // Develop a print job that runs in an asynchronous cycle.
    let task_instance_chain = delay_timer.insert_task(build_task_async_print())?;

    // Get the running instance of task 1.
    let task_instance = task_instance_chain.next_with_async_wait().await?;

    // Cancel running task instances.
    task_instance.cancel_with_async_wait().await?;

    // Remove task which id is 1.
    delay_timer.remove_task(1)?;

    // No new tasks are accepted; running tasks are not affected.
    delay_timer.stop_delay_timer()
}

```


 

tokio中的应用:

``` rust

#[tokio::main]
async fn main() -> Result<()> {
    // In addition to the mixed (smol & tokio) runtime
    // You can also share a tokio runtime with delayTimer, please see api `DelayTimerBuilder::tokio_runtime` for details.

    // Build an DelayTimer that uses the default configuration of the Smol runtime internally.
    let delay_timer = DelayTimerBuilder::default().build();

    // Develop a print job that runs in an asynchronous cycle.
    let task_instance_chain = delay_timer.insert_task(build_task_async_print())?;

    // Get the running instance of task 1.
    let task_instance = task_instance_chain.next_with_async_wait().await?;

    // Cancel running task instances.
    task_instance.cancel_with_async_wait().await?;

    // Remove task which id is 1.
    delay_timer.remove_task(1)?;

    // No new tasks are accepted; running tasks are not affected.
    delay_timer.stop_delay_timer()
}

```

 

非异步上下文的应用:

```

fn main() -> Result<()> {
    let delay_timer = DelayTimerBuilder::default().build();

    // Develop a print job that runs in an asynchronous cycle.
    let task_instance_chain = delay_timer.insert_task(build_task_async_print())?;

    // Develop an http request task that runs in an asynchronous cycle.
    delay_timer.add_task(build_task_async_request())?;

    // Get the running instance of task 1.
    let task_instance = task_instance_chain.next_with_wait()?;

    // Cancel running task instances.
    task_instance.cancel_with_wait()?;

    // Remove task which id is 1.
    delay_timer.remove_task(1)?;

    // No new tasks are accepted; running tasks are not affected.
    delay_timer.stop_delay_timer()?;

    Ok(())
}

```

##   repo: [delay-timer](https://github.com/BinChengZhao/delay-timer)

##   doc: [delay-timer-doc](https://docs.rs/delay_timer)

##   crates: [delay-timer-crates](https://crates.io/crates/delay_timer)

  • mTimer.schedule(task,delay,period); //延迟3秒执行一次,然后每个2秒执行一次 mTimer.schedule(,3000,2000); //延迟0秒执行一次,然后每个2秒执行一次(即不延迟马上执行一次而不是2秒后执行一次) mTimer.schedule(,0,2000); task TimerTask: task to be scheduled. delay

  • 来自阅读Java多线程编程核心技术的读书笔记,按照自己思路写了一些整理 越读越感觉这本书是一本“口水书”,有堆砌代码案例的嫌疑,看上去感觉更像是一本“博文集”。不是很建议作为自学并发的书籍,但是可以作为初步了解Java并发的窗口,初步熟悉Java中遇到的一些基本方法 历史内容: Java多线程核心技术1 - 多线程技能 Java多线程核心技术2 - 对象和变量的并发访问 Java多线程核心技术3

  • Timer 定时器 定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。在Java中,可以通过Timer和TimerTask类来实现定义调度的功能 如何创建定时器呢? 1.创建定时器对象:Timer timer = new Timer(); 2.创建一个自定义类,继承TimerTask抽象类 3.调用 timer调用schedule(TimerTask task, lo

 相关资料
  • 执行周期性任务也是一样简单,您只需要编写一行代码: RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Daily); 此行在持久存储中创建一个新实体。 Hangfire Server中的一个特殊组件(请参阅 处理后台任务) 以分钟为间隔检查周期性任务,然后在队列中将其视作 fire-and-forget 任务。这样就可以照常跟踪

  • 我尝试定期在JavaFX应用程序后台线程中运行,这修改了一些GUI属性。 我想我知道如何使用和类从和不能弄清楚如何运行这样的周期性任务不使用方法。这将是很好的,如果我可以使用一些从编造方法() 我试图每5秒运行,这会重新启动,但它会立即挂起,因为甚至被调用... 最后我使用执行器。newSingleThreadScheduledExecutor(),它每5秒启动一次my,并使用以下命令运行另一个:

  • 我正在开发一个登录网站的程序。它获得一些值,然后每135分钟左右在网站上进行一定的点击。值,“obtained_value”是从网站上读取的,每次点击程序都会递减一些值。我想运行程序,直到获得的值小于10。一旦发生这种情况,我想暂停程序直到达到目标时间并重新启动点击循环。我想在每次达到目标时间时都这样做。我在以下代码中实现了这个逻辑,但我的代码在达到目标时间后保持睡眠,而不是重新启动循环。我如何解

  • 可以通过设置任务详情页中的周期,实现建立周期性任务。比如“周例会”

  • 我很难找到有关 Xamarin.Forms 的后台任务支持的文档。Xamarin.Forms 是否为定期后台任务提供支持? 我需要为Windows手机10和Android实现它。

  • 本文向大家介绍ruby执行周期性任务的三种gem介绍,包括了ruby执行周期性任务的三种gem介绍的使用技巧和注意事项,需要的朋友参考一下 1.whenever 首先,whenever是基于linux的cron服务的,所以,在windows平台上没有直接的方法使用该gem。whenever严格来说应该算一个cron的翻译器,将ruby代码翻译为cron脚本,从而将周期性任务转交给cron实际去完成