C#定时任务调度组件有哪些-Quartz.NET,Hangfire,Coravel还有呢
moboyou 2025-04-05 18:46 11 浏览
本文首发于码友网《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表达式
FluentScheduler
FluentScheduler是由一位巴西的.NET开发者Talles L开发并维护的.NET平台下的一款自动定时任务调度器组件。
它提供了比较丰富的定时任务调度接口,开发者可以快速方便地通过接口设置调度时间,比如:间隔1秒,2秒...n秒,只执行一次,哪月的哪一天等等。具体请参考我之前写过的两篇关于FluentScheduler**的文章:
- 《推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件--FluentScheduler》
- 《简单、轻量、功能非常强大的C#/ASP.NET定时调度任务执行管理组件–FluentScheduler之实例篇》
官方地址:
https://github.com/fluentscheduler/FluentScheduler
特性
- 提供丰富的任务调度接口,配置方便
TaskScheduler
TaskScheduler是一个为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.NET
Gofer.NET是支持分布式的任务/作业调度组件,可以运行在.NET Core应用程序中。
官方地址:
https://github.com/brthor/Gofer.NET
特性
- 使用通用表达式语法将作业添加到队列并执行
- 可简单地通过添加新节点来扩展任务工作池
- 在Redis的支持下,所有的任务都被持久化
Coravel
Coravel是一个零配置的基于.NET标准库的微组件,它包含了定时任务调度,缓存,队列,事件广播等等功能。
官方地址:
https://docs.coravel.net/Scheduler/
- 简单,优雅,流畅的代码书写方式创建定时任务
- 基于.NET标准库,跨平台
- 丰富的调度接口
- 支持Cron表达式
- 支持全局错误处理
Quartz.NET
Quartz.NET是一个开源的定时作业调度项目,旨在创建一个免费商业使用的作业调度器,同时具有“企业级”的特性。Quartz.NET目前的版本是支持跨平台的,即支持.NET和.NET Core的应用程序。
官方地址:
http://www.quartz-scheduler.net/
特性
- API 操作简单,只要几行简单的代码你就可以在应用程序里面实现自己的作业调度,并实时监视作业执行情况
- 触发器功能强大,比 Windows 的任务计划提供更细的触发粒度
- 良好的可扩展性,它基于接口编程,你可以实现自己的 Schedule 调度器,Job 作业,以及 Trigger 触发器等
- 持久化,作业可以保存在内存中,也可以持久化到数据库,支持多种数据库类型:SqlServer、Oracle、MySql等
- 分布式和集群,这是一个高级应用,可以在多台计算机之间创建负载平衡、容错处理
- 支持Cron表达式
- 支持以配置文件的方式定制作业调度
具体使用可参考《基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度》
Hangfire
Hangfire是一个支持.NET和.NET Core应用程序的跨平台的后台作业处理框架,使用Hangfire时不再需要Windows服务或者单独的进程。Hangfire可以在ASP.NET/ASP.NET Core等应用程序中以简单的方式实现触发,延迟以及定时执行等任务。同时还支持CPU和I/O密集型、长时间运行和短时间运行的作业而不需要设置Windows服务或者其他的任务调度。Hangfire支持多种数据存储方式,如:Redis, SQL Server, SQL Azure和MSMQ等。
官方地址: https://www.hangfire.io
特性
- 安装简单,快速入门:没有Windows服务,没有Windows调度程序,不需要单独的应用程序
- 可持久化:后台作业是在存储中持久存储介质中的,如:SQL Server、Redis、PostgreSQL、MongoDB等
- 作业数据透明:内置的web界面允许您查看后台作业的整体情况,以及观察每个后台作业的状态
- 可靠:后台作业一旦无异常地被创建,Hangfire负责至少处理一次这个作业
- 分布式:后台方法调用及其参数是序列化的,因此可以克服进程边界问题
- 可扩展:作业过滤器允许您以类似于ASP.NET MVC操作过滤器的方式向后台处理添加自定义功能
- 高效:尽管默认安装使用SQL Server和轮询来获取作业,但可以利用MSMQ或Redis扩展来将处理延迟降低到最低
- 自维护:你不需要手动维护和清理存储空间,Hangfire会尽可能地自动清理旧的数据
- 开源免费:Hangfire是开源的框架并且对商用免费,只需遵循LGPLv3许可即可
结束语
本文旨在为大家收集整理.NET/.NET Core中常用的定时任务框架和组件,希望对你有帮助。
如果你还有其他的或者更好的框架/组件,欢迎留言反馈。
- 上一篇:JMeter基础
- 下一篇:时序数据库在水电站领域的应用
相关推荐
- 验证IronPython的ScriptEngine和ScriptScope的兼容性验证机制?
-
测试和验证IronPython兼容性机制的完整指南IronPython的ScriptEngine和ScriptScope兼容性验证机制需要通过多层次测试确保其正确性。以下是系统化的测试方法和实践...
- C#+Python 热更新技术在游戏开发中的核心应用场景
-
一、核心玩法逻辑动态更新1.战斗系统实时调优技能逻辑热更新:通过Python动态修改技能伤害公式、特效触发条件,例如:python#实时调整法师大招伤害系数defupdate_firest...
- 不到100行代码制作各种证件照
-
文|某某白米饭来源:Python技术「ID:pythonall」生活中经常需要使用各种版本的电子版证件照,如:红底、蓝底、白底、一寸、两寸等等。在Python中替换图片背景色可以用Ima...
- python从入门到脱坑 输入与输出——print()函数
-
大家好今天开始系统的讲解一些入门课程,遇到不会的也不用想太多,跟着写一遍,学习到新内容是你就会明白.以下是针对Python初学者的print()函数详解,从基础到实用技巧,配合清晰示例:一、最基础用法...
- 外婆都能学会的Python教程(七):Python中循环语句
-
前言Python是一个非常容易上手的编程语言,它的语法简单,而且功能强大,非常适合初学者学习,它的语法规则非常简单,只要按照规则写出代码,Python解释器就可以执行。下面是Python的入门教程循环...
- 解释一下Python脚本中版本号声明的作用
-
在Python脚本中声明版本号(如__version__变量)是一种常见的元数据管理实践,在IronPython的兼容性验证机制中具有重要作用。以下是版本号声明的核心作用及实现原理:一、版本号...
- 除了版本号声明,还有哪些元数据可以用于Python脚本的兼容性管理
-
在Python脚本的兼容性管理中,除了版本号声明外,还有多种元数据可以用于增强脚本与宿主环境的交互和验证。以下是一些关键的元数据类型及其应用场景:一、环境依赖声明1.Python版本要求pyth...
- 使用python实现人脸检测
-
一,准备dlib库下载:提取码1111dlib环境配置数据集下载python3.8opencv3.4.11二,代码老规矩,先导入包#导入包importnumpyasnpimport...
- Python
-
fromdjango.shortcutsimportrenderfromdjango.httpimportHttpResponseRedirectfromdjango.core.ur...
- 如何用Python画一个简单的笑脸
-
写在前面Python画画,必不可少的要用到小乌龟turtle库函数。对所用到的函数进行说明一下:fromturtleimport*#包含turtle库里面所有的函数,这样写可以不用标名hid...
- 习惯了各种框架的文件上传,php原生上传图片你还记得吗?
-
序言:如今各种框架层出不穷,如thinkphp、laravel、yii等,对于功能的封装也是各显其能,以至于很多开发者离开了框架之后就不会开发了,今天我以实际的例子介绍最基本的图片上传功能,希望对一些...
- php源码开发的商城系统有什么优点
-
1、php是一种流行的脚本语言,它编写的程序更容易被人理解。2、php的函数非常丰富,可以通过这些函数来进行开发,而不需要关注代码本身。3、php是一种面向对象的程序语言,它不像Java和...
- php宝塔搭建实战Dinner订餐系统php源码
-
大家好啊,欢迎来到web测评。本期给大家带来一套php开发的Dinner订餐系统php源码,上次是谁要的系统项目啊,帮你找到了,还说不会搭建,让我帮忙录制一期教程,趁着今天有空,简单的录制测试了一下,...
- php宝塔搭建实战美食小吃网站系统php源码
-
大家好啊,我是测评君,欢迎来到web测评。本期给大家带来一套pbootcms开发的美食小吃网站系统php源码,感兴趣的朋友可以自行下载学习。技术架构PHP7.0+nginx+sqlite+...
- php中assert和eval的详细介绍(代码示例)
-
本篇文章给大家带来的内容是关于php中assert和eval的详细介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。assert判断一个表达式是否成立。返回trueo...
- 一周热门
- 最近发表
- 标签列表
-
- curseforge官网网址 (16)
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- oracle 数据导出导入 (16)
- oracle两个表 (20)
- oracle 数据库 字符集 (20)
- oracle安装补丁 (19)
- matlab归一化 (16)
- matlab化简多项式 (20)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- c语言编程小知识大全 (17)
- css class选择器用法 (25)
- css样式引入 (30)
- html5和css3新特性 (19)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- 网站管理平台php源码 (19)