一、背景介绍

在ASP.NET Core MVC/WebApi项目需要一个按时执行的任务,每隔几分钟执行一个,或者每隔几小时执行一次等等,这个时候就需要一个定时的功能,最简单的就是用Timer自己写一个,但是自己写的性能等各方面有可能不健全等等,虽然ASP.NET Core现在内置提供了自带的Worker Service功能,但是对于复杂时间的作业计划并不支持;

大家可能会想到使用强大的Quartz.Net框架,为什么不选择它,主要是因为太复杂的了,不容易简单快速上手 ,而现在开源的库也越来越多,功能也越来越好,那么阿笨今天给大家推荐一款轻量级的作业调度Job任务框架,简单且功能强大,很方便的与ASP.NET Core进行结合,那么它的名字是什么。。。。

文章末尾阿笨已经给大家把示例代码进行封装好了,开箱即用。你再也不用为项目中如何执行多个作业任务而感到烦恼了?

ASP.NET Core轻量级作业调度Job任务框架_asp.net core Job

二、FluentScheduler介绍

我们是一批站在巨人肩上的人,好的东西也学会用,直接拿来主义。FluentScheduler定时任务库,通过nuget引用,可以设置各种事件间隔,,超级方便简单。

FluentScheduler是一个简单的任务调度框架,使用起来非常方便。作者的源码和例子的地址:

https://github.com/fluentscheduler/FluentScheduler

1.首先引用FluentScheduler.dll,dll数据源可通过NuGet程序包获取。打开管理解决方案的NuGet程序包,输入FluentScheduler即可。

步骤:状态栏选择 工具 - NuGet程序包管理器 – 管理解决方案的NuGet程序包,然后输入FluentScheduler即可。

ASP.NET Core轻量级作业调度Job任务框架_asp.net core Job_02

 

ASP.NET Core轻量级作业调度Job任务框架_asp.net core Job_03

三、FluentScheduler使用方式

第一步:

注册FluentSchedule服务

ASP.NET Core轻量级作业调度Job任务框架_asp.net core Job_04

 

ASP.NET Core轻量级作业调度Job任务框架_asp.net core定时任务_05

 

第二步:

定义我们要执行Job的任务,比如这里阿笨以“订单”和“邮件”两个Job任务进行举例

ASP.NET Core轻量级作业调度Job任务框架_asp.net core Job_06

 

第三步:

继承Registry类,可以理解为:该任务执行的计划的作业调度时间策略。比如:每5秒一次循环,每1小时一次循环。

ASP.NET Core轻量级作业调度Job任务框架_asp.net core Job_07

 

第四步:

继承实现IJob接口,可以理解为:具体执行的任务业务逻辑是什么。

ASP.NET Core轻量级作业调度Job任务框架_asp.net core Job_08

 

第五步:直接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);

ASP.NET Core轻量级作业调度Job任务框架_asp.net core Job

四、源码示例在线下载

扫码关注下方微信公众号,回复js7y关键字获取源代码下载地址。

有问题微信公众号回复wx关键字,加阿笨的个人微信号。