若是用知乎,能够关注专栏:.NET开源项目和PowerBI社区html
Quartznet大名鼎鼎应该不多有人不知道,相关的开源项目不少,不过那东东对新手来讲,有点晦涩,加上哪一个Cron表达式,可能一进去云里雾里的。今天给你们介绍一个简单的在.NET平台上运行Cron计划任务的组件CronNET。同时也给你们推介几个Cron表达式的工具。linux
本文原文地址:.NET平台开源项目速览(21)Cron任务调度CronNETgit
1.Cron介绍和工具
cron是一个linux下的定时执行工具,能够在无需人工干预的状况下运行做业。cron服务器能够根据配置文件约定的时间来执行特定的做务。因此其余组件和平台根据其语法作了支持,就有了各类各样的语言版本。Cron的语法表达式很是灵活,也很是复杂,不过不建议你们一次性撸进去出不来,须要用到的时候用下面几个工具查一下,生成就好。慢慢就理解了,固然简单主要的语法看得懂就行,抄来抄去就会了。github
若是要了解Cron语法,能够看下面这篇文章,很是简洁和全面:Cron表达式。express
下面给你们介绍2个好用的Cron工具:c#
1.在线Cron表达式生成器:http://cron.qqe2.com/ 。配置至关全面,能够把你想要执行的任务直接图形化界面配置出来,获得Cron表达式。也能够反解析到UI,以下图:windows
2.Cron表达式解析组件:https://github.com/bradymholt/cron-expression-descriptor,能够将Cron表达的转换为天然语言,支持不少语言,包括中文。重点包括了中文服务器
看看第3部分咱们的演示。ide
2.CronNET介绍和使用
CronNET是一个简单的C#类库,用来执行Cron表达式定义的计划任务。它支持绝大部分Cron表达式,看测试下面的代码,很是全面了。并且整个下面短小精悍,总过不过110行代码。因此集成到本身的项目中去也很是容易。函数
Github地址:https://github.com/kevincolyar/CronNET
下面咱们经过一段简单的代码来看看效果和使用。本身下面源代码编译dll,引用命名空间 using CronNET
2.1 基本使用
定义一个全局的CronDaemon对象,用来存储Job,在main函数中添加cron任务,我添加了一个每分钟执行的任务,任务的内容就是打印个日志。
private static CronDaemon cron_daemon = new CronDaemon(); static void Main(string[] args) { cron_daemon.AddJob("* * * * *", MiniteTask); Console.WriteLine("任务开始时间:{0}", DateTime.Now.ToLongTimeString()); cron_daemon.Start(); while (true) Thread.Sleep(6000); } static void MiniteTask() { Console.WriteLine("{0}:定时任务执行",DateTime.Now.ToLongTimeString()); }
看看执行结果,每分钟都执行了一次:
2.2 Windows服务
下面咱们看看在windows服务中怎么使用,起始原理差很少,Github里面有一个windows服务的例子,不过我通常比较喜欢用XAgent来完成。
class MyService : AgentServiceBase<MyService> { //Job private static CronDaemon cron_daemon = new CronDaemon(); internal static void MiniteTask() { XTrace.WriteLine("{0}:定时任务执行", DateTime.Now.ToLongTimeString()); } public MyService() { //设置服务名称和描述,以及线程数 DisplayName = "CronTestService"; Description = "CronTestService"; ThreadCount = 0; cron_daemon.AddJob("* * * * *", MiniteTask);//添加job } /// <summary>服务启动</summary> /// </remarks> protected override void StartWork(String reason) { XTrace.WriteLine("任务开始时间:{0}", DateTime.Now.ToLongTimeString()); cron_daemon.Start();//启动 base.StartWork(reason); } /// <summary>服务中止</summary> protected override void StopWork(String reason) { base.StopWork(reason); } }
XAgent是一个快速,图形化界面的Windows服务工具,集成在Newlife组件中。使用能够参考个人这篇博客:探索Newlife组件:服务代理利器XAgent的前世此生。
下面是运行效果,结果,结果在右边日志文件中。
3.cron-expression-descriptor使用
cron-expression-descriptor是一个C#开发的开源Cron表达式解析器,能够将Cron表达式转换为天然语言,支持英语/西班牙语/俄语/法语/简体中文等语言。支持的平台有.NET Core1.0,.NET Framework 4.5和Mono 4.5。
Github地址:https://github.com/bradymholt/cron-expression-descriptor
好比咱们来看几个例子,直接在VS中使用Nuget,搜索CronExpressionDescriptor安装便可:
static void Main(string[] args) { XTrace.UseConsole(); XTrace.WriteLine(ExpressionDescriptor.GetDescription("*/6 * 1 * *", new Options() { Locale= "zh-CN" })); XTrace.WriteLine(ExpressionDescriptor.GetDescription("* * * 2,6 *", new Options() { Locale = "zh-CN" })); XTrace.WriteLine(ExpressionDescriptor.GetDescription("*/3 12 * 1 MON-FRI", new Options() { Locale = "zh-CN" })); Console.ReadKey(); }
解析的内容以下,咱们在选项中配置了Local="zh-CN":
注意安装后,支持的语言资源文件都在bin目录下,以下面就是支持的语言:
因此有了这东西,作一个在线版的Cron解析器也很easy了。。。好了,剩下的该你在业务中表演了。
4.资源
本文演示代码下载:CronNET.rar
Cron表达式语法参考:Cron表达式
CronNET Github地址:https://github.com/kevincolyar/CronNET
Cron解析器Github地址:https://github.com/bradymholt/cron-expression-descriptor