ASP.NET Core轻量级作业调度Job任务框架
一、背景介绍
在ASP.NET Core MVC/WebApi项目需要一个按时执行的任务,每隔几分钟执行一个,或者每隔几小时执行一次等等,这个时候就需要一个定时的功能,最简单的就是用Timer自己写一个,但是自己写的性能等各方面有可能不健全等等,虽然ASP.NET Core现在内置提供了自带的Worker Service功能,但是对于复杂时间的作业计划并不支持;
大家可能会想到使用强大的Quartz.Net框架,为什么不选择它,主要是因为太复杂的了,不容易简单快速上手 ,而现在开源的库也越来越多,功能也越来越好,那么阿笨今天给大家推荐一款轻量级的作业调度Job任务框架,简单且功能强大,很方便的与ASP.NET Core进行结合,那么它的名字是什么。。。。
文章末尾阿笨已经给大家把示例代码进行封装好了,开箱即用。你再也不用为项目中如何执行多个作业任务而感到烦恼了?
二、FluentScheduler介绍
我们是一批站在巨人肩上的人,好的东西也学会用,直接拿来主义。FluentScheduler定时任务库,通过nuget引用,可以设置各种事件间隔,,超级方便简单。
FluentScheduler是一个简单的任务调度框架,使用起来非常方便。作者的源码和例子的地址:
https://github.com/fluentscheduler/FluentScheduler
1.首先引用FluentScheduler.dll,dll数据源可通过NuGet程序包获取。打开管理解决方案的NuGet程序包,输入FluentScheduler即可。
步骤:状态栏选择 工具 - NuGet程序包管理器 – 管理解决方案的NuGet程序包,然后输入FluentScheduler即可。
三、FluentScheduler使用方式
第一步:
注册FluentSchedule服务
第二步:
定义我们要执行Job的任务,比如这里阿笨以“订单”和“邮件”两个Job任务进行举例
第三步:
继承Registry类,可以理解为:该任务执行的计划的作业调度时间策略。比如:每5秒一次循环,每1小时一次循环。
第四步:
继承实现IJob接口,可以理解为:具体执行的任务业务逻辑是什么。
第五步:直接F5允许即可。
需要有一点要注意的就是NonReentrantAsDefault方法的作用特别重大:它代表每一次任务都必须执行完成后,才能开启下一次执行,防止并发执行带来的问题,即也就是防止重复执行。下次任务开始一定要等上一次任务执行完成后才进行。
这里给大家列举了一下的我们常用的几种作业调度计划
1、 立即执行每10秒一次的计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)
Schedule().ToRunNow().AndEvery(10).Seconds();
2、立即执行每10秒一次的计划任务。如果本次任务没有结束,下一次的任务则不会开始,禁止并行运行
Schedule().NonReentrant().ToRunNow().AndEvery(10).Seconds();
3、在每天的21:15执行计划任务
Schedule(() => Console.WriteLine("www.taohuayuan178.com It's 9:15 PM now.")).ToRunEvery(1).Days().At(21,15);
4、立即执行一个在每月的第一个星期一 3:00 的计划任务
Schedule(() => Console.WriteLine("It's 3:00 AM now.")).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3,0);
5、在每周一的21:15执行计划任务
Schedule(() => Console.WriteLine("It's 9:15 PM now.")).ToRunEvery(1).Weeks().On(DayOfWeek.Monday).At(21,15);
四、源码示例在线下载
扫码关注下方微信公众号,回复js7y关键字获取源代码下载地址。
有问题微信公众号回复wx关键字,加阿笨的个人微信号。
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【腾讯课堂】:https://abennet.ke.qq.com
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET