前言
定时任务调度应该是业务开发中比较常见的需求,比如说微信文章定时发布、定时更新某一个业务状态等。今天要给大家推荐一款.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); } }
项目源码地址
更多实用功能特性欢迎前往开源地址查看👀,别忘了给项目一个Star💖。
优秀项目和框架精选
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发效率和质量。坑已挖,欢迎大家踊跃提交PR,自荐(让优秀的项目和框架不被埋没🤞
)。
https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md