C# 通过 Quartz .NET 实现 schedule job 的处理
在实际项目的开发过程中,会有这样的功能需求:要求创建一些Job定时触发运行,比如进行一些数据的同步。
那么在 .Net Framework 中如何实现这个Timer Job的功能呢?
这里所讲的是借助第三方的组件 Quartz.Net 来实现(源码位置:https://github.com/quartznet/quartznet)
详细内容请看如下步骤:
1):首先在VS中创建一个Console Application,然后通过NuGet下载Quartz.Net组件并且引用到当前工程中。我们下载的是3.0版本,注:此版本与之前的2.0版本一定的区别。
2):继承 IJob 接口,实现 Excute 方法
public class EricSimpleJob : IJob { public Task Execute(IJobExecutionContext context) { Console.WriteLine("Hello Eric, Job executed."); return Task.CompletedTask; } } public class EricAnotherSimpleJob : IJob { public Task Execute(IJobExecutionContext context) { string filepath = @"C:\timertest.txt"; if (!File.Exists(filepath)) { using (FileStream fs = File.Create(filepath)) { } } using (StreamWriter sw = new StreamWriter(filepath, true)) { sw.WriteLine(DateTime.Now.ToLongTimeString()); } return Task.CompletedTask; } }
3):完成 IScheduler, IJobDetails 与 ITrigger之间的配置
static async Task TestAsyncJob() { var props = new NameValueCollection { { "quartz.serializer.type", "binary" } }; StdSchedulerFactory schedFact = new StdSchedulerFactory(props); IScheduler sched = await schedFact.GetScheduler(); await sched.Start(); IJobDetail job = JobBuilder.Create<EricSimpleJob>() .WithIdentity("EricJob", "EricGroup") .Build(); IJobDetail anotherjob = JobBuilder.Create<EricAnotherSimpleJob>() .WithIdentity("EricAnotherJob", "EricGroup") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("EricTrigger", "EricGroup") .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) .Build(); ITrigger anothertrigger = TriggerBuilder.Create() .WithIdentity("EricAnotherTrigger", "EricGroup") .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) .Build(); await sched.ScheduleJob(job, trigger); await sched.ScheduleJob(anotherjob, anothertrigger); }
4):在 Main 方法中完成调用, 由于是异步处理,因此这里用 Console.ReadKey() 完成对主线程的阻塞
static void Main(string[] args) { TestAsyncJob(); Console.ReadKey(); }
5):最终的运行结果为,两个Job使屏幕和文件不断输出字符串
更多信息请参考如下链接:
https://www.cnblogs.com/MingQiu/p/8568143.html
6):如果我们想将此注册为Windows Service,在对应Service启动之后自动处理对应Job,请参考如下链接:
http://www.cnblogs.com/mingmingruyuedlut/p/9033159.html
如果是2.0版本的Quartz.Net请参考如下链接:
https://www.quartz-scheduler.net/download.html
https://www.codeproject.com/Articles/860893/Scheduling-With-Quartz-Net
https://stackoverflow.com/questions/8821535/simple-working-example-of-quartz-net
- C# 通过 Quartz .NET 实现Timer Job并将其注册成为Windows Service
- ASP.NET 客户端回调实现 (C#) 示例 (VS2005)MSDN 错误处理
- C#.net 动态生成的button按钮及回发处理的实现
- [转载]Web开发中的缓存技术:通过ETag实现缓存处理(Asp.Net)
- C# 通过 Renci.SshNet 实现SFTP数据传输
- Web开发中的缓存技术之三:通过ETag实现缓存处理(ASP.NET MVC版)
- 通过ADO.NET实现事务处理
- Quartz.NET 2.0 学习笔记(3) :通过配置文件实现任务调度
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- .Net/C# 封装磁盘目录文件搜索功能的工具类 (实现了与搜索相关的事件,以便插入客户处理代码)
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
- 通过ADO.NET实现事务处理
- Quartz.NET 2.0 学习笔记(3) :通过配置文件实现任务调度
- C#(ASP.NET) 下载数据 C#实现通过程序自动抓取远程Web网页信息
- C# 通过 Renci.SshNet 实现SFTP数据传输
- 如何实现C#.net图像处理