前言
定时任务调度应该是业务开发中比较常见的需求,比如说微信文章定时发布、定时更新某一个业务状态等。今天要给大家推荐一款.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
© 版权声明
博主的文章没有高度、深度和广度,只是凑字数。利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章!如若有侵权,请联系博主删除。
喜欢就点个赞吧