Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是...

C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是...

作者头像
Rector
发布于 2020-06-19 03:12:05
发布于 2020-06-19 03:12:05
3.5K0
举报
文章被收录于专栏:.NET开发者社区.NET开发者社区

原文由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表达式

FluentScheduler

FluentScheduler是由一位巴西的.NET开发者Talles L开发并维护的.NET平台下的一款自动定时任务调度器组件,它提供了比较丰富的定时任务调度接口,开发者可以快速方便地通过接口设置调度时间,比如:间隔1秒,2秒...n秒,只执行一次,哪月的哪一天等等。具体请参考我之前写过的两篇关于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、PostgreSQLMongoDB
  • 作业数据透明:内置的web界面允许您查看后台作业的整体情况,以及观察每个后台作业的状态
  • 可靠:后台作业一旦无异常地被创建,Hangfire负责至少处理一次这个作业
  • 分布式:后台方法调用及其参数是序列化的,因此可以克服进程边界问题
  • 可扩展:作业过滤器允许您以类似于ASP.NET MVC操作过滤器的方式向后台处理添加自定义功能
  • 高效:尽管默认安装使用SQL Server和轮询来获取作业,但可以利用MSMQ或Redis扩展来将处理延迟降低到最低
  • 自维护:你不需要手动维护和清理存储空间,Hangfire会尽可能地自动清理旧的数据
  • 开源免费:Hangfire是开源的框架并且对商用免费,只需遵循LGPLv3许可即可

结束语

本文旨在为大家收集整理.NET/.NET Core中常用的定时任务框架和组件,希望对你有帮助。

如果你还有其他的或者更好的框架/组件,欢迎留言反馈。

码友网:一个专注.NET/.NET Core开发的编程爱好者社区

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.NET Core/.NET5/.NET6 开源项目任务调度组件汇总
SQL Server 与 Redis 持久化支持。Hangfire使用持久性存储来存储作业、队列和统计信息,并让它们在应用程序重启后继续存在。存储子系统的抽象程度足以支持经典的SQL Server和快速的Redis。
郑子铭
2025/01/13
1380
.NET Core/.NET5/.NET6 开源项目任务调度组件汇总
.NET有哪些好用的定时任务调度框架
定时任务调度的相关业务在日常工作开发中是一个十分常见的需求,经常有小伙伴们在技术群提问:有什么好用的定时任务调度框架推荐的?今天大姚给大家分享5个.NET开源、简单、易用、免费的任务调度框架,帮助大家在做定时任务调度框架技术选型的时候有一个参考。
追逐时光者
2024/05/09
3730
.NET有哪些好用的定时任务调度框架
.NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件
开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激、尊重。请严格遵守每个项目的开源协议后再使用。尊重知识产权,共建和谐开源社区。
张传宁IT讲堂
2021/06/22
2.3K0
.NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件
基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
在之前的文章《推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler》和《简单、轻量、功能非常强大的C#/ASP.NET定时调度任务执行管理组件–FluentScheduler之实例篇》中,我们认识和了解了FluentScheduler这款轻量的定时任务调度执行组件。今天再给大家介绍一款关于定时任务调度执行的组件–Quartz.Net,Quartz.Net是Java版Quartz的.NET实现。 相对FluentScheduler实现定时调度任务的使用简
Rector
2018/02/01
3.8K0
基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
Java定时任务调度详解前言JDK原生定时工具:TimerJDK对定时任务调度的线程池支持:ScheduledExecutorService定时任务大哥:QuartzSpring和Quartz的整合
在实际项目开发中,除了Web应用、SOA服务外,还有一类不可缺少的,那就是定时任务调度。定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电影券;比如在保证最终一致性的场景中,往往利用定时任务调度进行一些比对工作;比如一些定时需要生成的报表、邮件;比如一些需要定时清理数据的任务等。本篇博客将系统的介绍定时任务调度,会涵盖Timer、ScheduledExecutorService、开源工具包Quartz,以及Spring和Quartz的结合等内容。
用户2890438
2018/08/20
1.1K0
.NET之Hangfire快速入门和使用
  定时任务调度问题,是一个老生常谈的问题。网上有许多定时任务调度的解决方案,对于我而言很早以前主要是使用Window计划和Window服务来做任务定时执行,然后就开始使用定时任务调度框架Quartz.Net。但是却一直没有上手过Hangfire这个自带后台任务调度面板,可以在后台手动执行任务的神奇的任务调度框架。前段时间终于开始对他下手了,通过在网上查阅了一些资料和查看了Hangfire在Github中的demo,终于在我自己的项目中用上了Hangfire。在该篇文章中主要简单介绍一下什么是Hangfire,Hangfire的基本特征与优点和分别使用MySQL,MS SQL Server作为存储使用。
追逐时光者
2019/09/30
2K0
.NET之Hangfire快速入门和使用
.NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练
2.3、如何基于Quartz.NET封装实现优雅的作业调度执行框架(ABenNet.QuartzNet.Practice)
跟着阿笨一起玩NET
2019/03/14
1.3K0
.NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练
开源的.NET定时任务组件Hangfire解析
彭泽0902
2018/01/04
2.5K0
开源的.NET定时任务组件Hangfire解析
用abp vNext快速开发Quartz.NET定时任务管理界面
今天这篇文章我将通过实例代码带着大家一步一步通过abp vNext这个asp.net core的快速开发框架来进行Quartz.net定时任务调度的管理界面的开发。大伙最好跟着一起敲一下代码,当然源码我会上传到github上,有兴趣的小伙伴可以在文章底部查看源码链接。
依乐祝
2019/03/11
2.4K0
用abp vNext快速开发Quartz.NET定时任务管理界面
在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度
在这篇文章中,我将介绍如何使用ASP.NET Core托管服务运行Quartz.NET作业。这样的好处是我们可以在应用程序启动和停止时很方便的来控制我们的Job的运行状态。接下来我将演示如何创建一个简单的 IJob,一个自定义的 IJobFactory和一个在应用程序运行时就开始运行的QuartzHostedService。我还将介绍一些需要注意的问题,即在单例类中使用作用域服务。
依乐祝
2020/04/09
3K0
在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度
SpringQuartz 实现定时任务调度
SpringQuartz 时间配置,使用在线Cron表达式生成器 http://cron.qqe2.com/
用户1518699
2018/09/12
1.9K0
SpringQuartz 实现定时任务调度
分布式定时任务调度框架实践
分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的使用进行了探究实践,并分析了这几种框架的优劣势和对自身业务的思考。
2020labs小助手
2020/03/09
1.2K0
ASP.NET Core轻量级作业调度Job任务框架
一、背景介绍 在ASP.NET Core MVC/WebApi项目需要一个按时执行的任务,每隔几分钟执行一个,或者每隔几小时执行一次等等,这个时候就需要一个定时的功能,最简单的就是用Timer自己写一个,但是自己写的性能等各方面有可能不健全等等,虽然ASP.NET Core现在内置提供了自带的Worker Service功能,但是对于复杂时间的作业计划并不支持; 大家可能会想到使用强大的Quartz.Net框架,为什么不选择它,主要是因为太复杂的了,不容易简单快速上手 ,而现在开源的库也越来越多,功能也
跟着阿笨一起玩NET
2021/02/02
3.7K1
ASP.NET Core轻量级作业调度Job任务框架
.NET Core开源Quartz.Net作业调度框架实战演练
一、需求背景 人生苦短,我用.NET Core!作为一枚后端.NET开发人员,项目实践常遇到定时Job任务的工作,在Windows平台最容易想到的的思路Windows Service服务应用程序,而在Linux系统中一般会采用Crontab程序,PM2、Supervior等进程管理工具来解决宿主托管问题。今天给阿笨大家分享一种Docker容器化快速部署的方式来实现.NET Core后台定时任务托管在Linux操作系统中。 目前在.NET Core开发后台定时任务有两种实现方式: 1、采用AspNetC
跟着阿笨一起玩NET
2019/09/16
1.3K0
分布式定时任务调度框架选型
任何工具的使用都要结合自身的业务场景,脱落业务场景谈技术选型就是耍流氓。 考虑私有云场景业务量一般,高并发场景很少遇到,同一时间也不会有超大量定时任务同时需要执行,所以考虑自研也未尝不可。 目前自研最急需解决的问题并不是高并发,而是如何避免任务被重复执行; 场景就变成了:
BUG弄潮儿
2021/09/10
3.2K0
分布式定时任务调度框架选型
太好用了!Python 定时任务调度框架 APScheduler 详解!
我们在工作过程中,可能会遇到有定时任务的需求。大部分定时任务偏向 数据采集、消息提醒、邮件自动发送、数据指标统计 等场景。
Python兴趣圈
2023/12/11
6.4K0
太好用了!Python 定时任务调度框架 APScheduler 详解!
.net core下定时任务的实现
Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库。在 .net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4.X环境中配置always running的麻烦,真正做到开箱即用。
Bug生活2048
2018/08/31
1.4K0
.net core下定时任务的实现
分布式定时任务介绍
当业务需求不断增长时,应用经常需要执行一些定时任务来实现业务逻辑或系统功能。传统单机环境下,我们通常用系统自带的crontab来实现定时任务;在分布式场景中,定时任务的实现需要考虑任务的调度策略、并发处理等问题。如何何为分布式定时任务选择合适的方案,成为了研发团队面临的一项重大挑战。
windealli
2023/10/24
8290
分布式定时任务介绍
任务调度框架Quartz(一) Quartz——一个强大的定时任务调度框架
Quartz,水晶、石英,一个简单朴素有美丽的名字,在Java程序界,Quartz大名鼎鼎,很多Java应用几乎都集成或构建了一个定时任务调度系统,Quartz是一个定时任务调度框架。
青山师
2023/05/04
1.4K0
【壹起学】1:Uwl.Admin开源框架基于QuartzNet的实现
Quartz.NET官网地址:https://www.quartz-scheduler.net/
老张的哲学
2022/04/11
8930
【壹起学】1:Uwl.Admin开源框架基于QuartzNet的实现
推荐阅读
相关推荐
.NET Core/.NET5/.NET6 开源项目任务调度组件汇总
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档