原文由Rector首发于 码友网 之 《C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件有哪些,Timer,FluentScheduler,TaskScheduler,Gofer.NET,Coravel,Quartz.NET还是Hangfire》
摘要C#/.NET/.NET Core的定时任务调度组件你用过那些呢,是Timer,FluentScheduler,TaskScheduler,Gofer.NET,Coravel,Quartz.NET还是Hangfire,又或者是其他的定时任务调度框架/组件呢?你常用的实现定时任务调度的方法又是怎样的呢?
前言定时任务,任务调度这些词在程序开发中会被经常提及。定时任务是什么?在计算机的世界里,定时任务就是在指定的时间或者时间范围内,按照一定的频率完成指定的指令。它是一个具有周期性,规律性的活动。
定时任务可以是:早上按时叫你起床的闹钟,记录并提醒你日程的日历或者生日问候,某网站定时给你的周刊、月刊消息推送,某系统周期性做的每日、月度、年度数据汇总,等等。
由此可见,定时任务与我们的生活、工作紧密联系在一起。特别地,对于我们开发人员来说,但凡要实现周期性地操作,就需要使用定时任务来处理。
那么,对于C#/.NET开发人员来说,如何实现定时任务,实现定时任务又有哪些方法或者有哪些组件呢?这些问题对于从事C#/.NET的开发者,特别是刚入行不久或者经验欠缺者来说将会是比较困扰的问题。
今天Rector就收集整理一些C#/.NET/.NET Core应用程序编程开发中常用的实现定时任务调度的方法或者定时任务调度组件。
Timer类Timer是.NET内置的定时器类,它位于命名空间System.Timers下。Timer是一个基于服务器端的计时器,提供了Interval属性来设置重复触发定时任务的间隔(单位为毫秒),触发事件则由Elapsed事件来指定。另外,还可以通过AutoReset属性来设置Timer的Elapsed事件只触发一次或者重复触发。
官方地址: https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=netframework-4.8
特性
轻量,简单易用
.NET框架内置,无须引用第三方库
不支持Cron表达式
FluentSchedulerFluentScheduler是由一位巴西的.NET开发者Talles L开发并维护的.NET平台下的一款自动定时任务调度器组件,它提供了比较丰富的定时任务调度接口,开发者可以快速方便地通过接口设置调度时间,比如:间隔1秒,2秒...n秒,只执行一次,哪月的哪一天等等。具体请参考我之前写过的两篇关于FluentScheduler的文章:
《推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件--FluentScheduler》
《简单、轻量、功能非常强大的C#/ASP.NET定时调度任务执行管理组件–FluentScheduler之实例篇》
官方地址: https://github.com/fluentscheduler/FluentScheduler
特性
提供丰富的任务调度接口,配置方便
TaskSchedulerTaskScheduler是一个为Windows任务调度程序提供.NET的封装组件,可以代替Windows操作系统自带的定时任务使用,提供了代码和编辑器两种方式创建定时任务。它聚合了多个版本,并提供编辑调度编辑器以快速创建定时任务。
官方地址: https://github.com/dahall/TaskScheduler
特性
支持.NET的多个版本(.NET 2.0, 3.5, 4.0, 4.52 and .NET Standard 2.0.)
支持包括脚本语言在内的所有.NET语言,比如(PowerShell)
支持所有的V2本地化属性,甚至在V1的系统中
支持序列化成XML
支持目标版本的任务验证
支持Cron表达式触发器
提供可视化的定时任务调度编辑器
提供动作编辑器,触发器编辑器,事件查看器,任务执行历史查看器等对话框
Gofer.NETGofer.NET是支持分布式的任务/作业调度组件,可以运行在.NET Core应用程序中。
官方地址: https://github.com/brthor/Gofer.NET
特性
使用通用表达式语法将作业添加到队列并执行
可简单地通过添加新节点来扩展任务工作池
在Redis的支持下,所有的任务都被持久化
CoravelCoravel是一个零配置的基于.NET标准库的微组件,它包含了定时任务调度,缓存,队列,事件广播等等功能。
官方地址: https://docs.coravel.net/Scheduler/
简单,优雅,流畅的代码书写方式创建定时任务
基于.NET标准库,跨平台
丰富的调度接口
支持Cron表达式
支持全局错误处理
Quartz.NETQuartz.NET是一个开源的定时作业调度项目,旨在创建一个免费商业使用的作业调度器,同时具有“企业级”的特性。Quartz.NET目前的版本是支持跨平台的,即支持.NET和.NET Core的应用程序。
官方地址:
特性
API 操作简单,只要几行简单的代码你就可以在应用程序里面实现自己的作业调度,并实时监视作业执行情况
触发器功能强大,比 Windows 的任务计划提供更细的触发粒度
良好的可扩展性,它基于接口编程,你可以实现自己的 Schedule 调度器,Job 作业,以及 Trigger 触发器等
持久化,作业可以保存在内存中,也可以持久化到数据库,支持多种数据库类型:SqlServer、Oracle、MySql等
分布式和集群,这是一个高级应用,可以在多台计算机之间创建负载平衡、容错处理
支持Cron表达式
支持以配置文件的方式定制作业调度
具体使用可参考《基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度》
Hangfire