.NET开源的轻量化定时任务调度,支持临时的延时任务和重复循环任务(可持久化) – FreeScheduler

前言

定时任务调度应该是业务开发中比较常见的需求,比如说微信文章定时发布、定时更新某一个业务状态等。今天要给大家推荐一款.NET 开源的轻量化定时任务调度框架,支持临时的延时任务和重复循环任务(可持久化) ,可按秒,每天/每周/每月固定时间,自定义间隔执行:FreeScheduler。

项目介绍

FreeScheduler 是利用 IdleBus 实现的轻量化定时任务调度,支持临时的延时任务和重复循环任务(可持久化),可按秒,每天/每周/每月固定时间,自定义间隔执行,支持 .NET Core 2.1+、.NET Framework 4.0+ 运行环境。

 

FreeScheduler 定时任务类型
安装 nuget 包

Install-Package FreeScheduler

 

1、临时任务(不可持久化)

void Callback()
{
    Console.WriteLine("时间到了");
    scheduler.AddTempTask(TimeSpan.FromSeconds(10), Callback); //下一次定时
}

scheduler.AddTempTask(TimeSpan.FromSeconds(10), Callback);

普通任务

class MyTaskHandler : FreeScheduler.TaskHandlers.TestHandler
{
    public override void OnExecuting(Scheduler scheduler, TaskInfo task)
    {
        //todo..
    }
}

持久化任务
注意 Redis 持久化请安装:

Install-Package FreeScheduler.TaskHandlers.FreeRedis

 


// 使用 FreeSql 持久化任务
class MyTaskHandler : FreeScheduler.TaskHandlers.FreeSqlHandler
{
    public MyTaskHandler(IFreeSql fsql) : base(fsql) { }

    public override void OnExecuting(Scheduler scheduler, TaskInfo task)
    {
        Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss.fff")}] {task.Topic} 被执行");

        //强制使任务完成
        //task.Status = TaskStatus.Completed;
    }
}

API (循环任务/可持久化)

//每 5 秒触发,执行 N 次
var id = scheduler.AddTask("topic1", "body1", round: -1, 5);

//每次 不同的间隔秒数触发,执行 6 次
var id = scheduler.AddTask("topic1", "body1", new [] { 5, 5, 10, 10, 60, 60 });

//每天 20:00:00 触发,指定 utc 时间,执行 N 次
var id = scheduler.AddTaskRunOnDay("topic1", "body1", round: -1, "20:00:00");

//每周一 20:00:00 触发,指定 utc 时间,执行 1 次
var id = scheduler.AddTaskRunOnWeek("topic1", "body1", round: 1, "1:20:00:00");

//每月 1 日 20:00:00 触发,指定 utc 时间,执行 12 次
var id = scheduler.AddTaskRunOnMonth("topic1", "body1", round: 12, "1:20:00:00");

//自定义间隔
var id = scheduler.AddTaskCustom("topic1", "body1", "0/1 * * * * ? ");
class MyCustomTaskHandler : FreeScheduler.ITaskIntervalCustomHandler
{
    public TimeSpan? NextDelay(TaskInfo task)
    {
        //利用 cron 功能库解析 task.IntervalArgument 得到下一次执行时间
        //与当前时间相减,得到 TimeSpan,若返回 null 则任务完成
        return TimeSpan.FromSeconds(5);
    }
}

 

项目源码地址

https://github.com/2881099/FreeScheduler

 

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...