• 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跟着阿笨一起玩NET

          【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616跟着阿笨一起玩C#

          【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586跟着阿笨一起玩ASP.NET

          【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:806491485Asp.Net Core跨平台技术开

          【官方QQ五群:.NET Core跨平台开发技术(可加入)】:1036896405.NET Core跨平台开发技术

          【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628

          【腾讯课堂】:https://abennet.ke.qq.com

          【51CTO学院】:https://edu.51cto.com/sd/66c64

          【微信公众号】:http://dwz.cn/ABenNET

  • 相关阅读:
    css-使不同大小的图片在固定大小的容器中居中
    js-数组中查找特定元素并返回所有该元素的索引
    js-权威指南学习笔记5
    js-权威指南学习笔记4
    js-权威指南学习笔记3
    JavaScript中的类型转换
    js-权威指南学习笔记2
    通过维基API实现维基百科查询功能
    【代码笔记】iOS-FMDBDemo
    【代码笔记】iOS-自定义switch
  • 原文地址:https://www.cnblogs.com/51net/p/14337136.html
Copyright © 2020-2023  润新知