在实际项目的开发过程中,会有这样的功能需求:要求创建一些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 方法

  1. public class EricSimpleJob : IJob
  2. {
  3. public Task Execute(IJobExecutionContext context)
  4. {
  5. Console.WriteLine("Hello Eric, Job executed.");
  6. return Task.CompletedTask;
  7. }
  8. }
  9.  
  10. public class EricAnotherSimpleJob : IJob
  11. {
  12. public Task Execute(IJobExecutionContext context)
  13. {
  14. string filepath = @"C:\timertest.txt";
  15.  
  16. if (!File.Exists(filepath))
  17. {
  18. using (FileStream fs = File.Create(filepath)) { }
  19. }
  20.  
  21. using (StreamWriter sw = new StreamWriter(filepath, true))
  22. {
  23. sw.WriteLine(DateTime.Now.ToLongTimeString());
  24. }
  25.  
  26. return Task.CompletedTask;
  27. }
  28. }

3):完成 IScheduler, IJobDetails 与 ITrigger之间的配置

  1. static async Task TestAsyncJob()
  2. {
  3. var props = new NameValueCollection
  4. {
  5. { "quartz.serializer.type", "binary" }
  6. };
  7. StdSchedulerFactory schedFact = new StdSchedulerFactory(props);
  8.  
  9. IScheduler sched = await schedFact.GetScheduler();
  10. await sched.Start();
  11.  
  12. IJobDetail job = JobBuilder.Create<EricSimpleJob>()
  13. .WithIdentity("EricJob", "EricGroup")
  14. .Build();
  15.  
  16. IJobDetail anotherjob = JobBuilder.Create<EricAnotherSimpleJob>()
  17. .WithIdentity("EricAnotherJob", "EricGroup")
  18. .Build();
  19.  
  20. ITrigger trigger = TriggerBuilder.Create()
  21. .WithIdentity("EricTrigger", "EricGroup")
  22. .WithSimpleSchedule(x => x.WithIntervalInSeconds().RepeatForever())
  23. .Build();
  24.  
  25. ITrigger anothertrigger = TriggerBuilder.Create()
  26. .WithIdentity("EricAnotherTrigger", "EricGroup")
  27. .WithSimpleSchedule(x => x.WithIntervalInSeconds().RepeatForever())
  28. .Build();
  29.  
  30. await sched.ScheduleJob(job, trigger);
  31. await sched.ScheduleJob(anotherjob, anothertrigger);
  32. }

4):在 Main 方法中完成调用, 由于是异步处理,因此这里用 Console.ReadKey() 完成对主线程的阻塞

  1. static void Main(string[] args)
  2. {
  3. TestAsyncJob();
  4. Console.ReadKey();
  5. }

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 实现 schedule job 的处理的更多相关文章

  1. Quartz 和 springboot schedule中的cron表达式关于星期(周几)的不同表示

    一.Quartz中cron 表达式分析: quartz 官方源码(org.quartz.CronExpression)解释: Cron expressions are comprised of 6 r ...

  2. Quartz 在 Spring 中如何动态配置时间--转

    原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源 ...

  3. Quartz动态配置表达的方法

    在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度.有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间, ...

  4. SpringBoot入门教程(九)定时任务Schedule

    在日常项目运行中,我们总会有需求在某一时间段周期性的执行某个动作.比如每天在某个时间段导出报表,或者每隔多久统计一次现在在线的用户量.在springboot中可以有很多方案去帮我们完成定时器的工作,有 ...

  5. CronTrigger表达式和Quartz使用实例入门

    CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,如每月8日发工资的定时任务. CronTrigger,你可以 ...

  6. Spring和Quartz整合实现定时任务调度

    在Spring中可以很方便的使用Quartz来实现定时任务等功能,Quartz主要就是Schedule(任务调度器),Job(作业任务)和Trigger(触发器)三者的关系. 实现方式有多种,在此就介 ...

  7. 在 ASP.NET Core和Worker Service中使用Quartz.Net

    现在有了一个官方包Quartz.Extensions.Hosting实现使用Quartz.Net运行后台任务,所以把Quartz.Net添加到ASP.NET Core或Worker Service要简 ...

  8. 在.NET Core 中使用Quartz.NET

    Quartz.NET是功能齐全的开源作业调度系统,可用于最小的应用程序到大型企业系统. Quartz.NET具有三个主要概念: job:运行的后台任务 trigger:控制后台任务运行的触发器. sc ...

  9. ASP.NET Core MVC应用程序中的后台工作任务

    在应用程序的内存中缓存常见数据(如查找)可以显着提高您的MVC Web应用程序性能和响应时间.当然,这些数据必须定期刷新. 当然你可以使用任何方法来更新数据,例如Redis中就提供了设定缓存对象的生命 ...

随机推荐

  1. hbuilder、hbuilderx和vscode对比

    1. 从内存来对比 1.1 vscode占用内存 打开同一个项目,发现vscode占用内存比较多 1.2 HBuilder占用内存 1.3 HBuilderx占用内存 1.4 对比 从内存上来看,HB ...

  2. 为vue添加公用方法,vue添加通用方法

    common.js var common =function() { return{ f1:function(){ console.log("this is common f1().&quo ...

  3. JGUI源码:实现蒙版层显示(18)

    有的时候需要显示一个蒙版层,蒙版层显示的主要原理是在指定元素比如div上创建一个子元素div,设置absolute.宽高100%.设置z-index置于顶层,设置半透明效果,fadein,fadeou ...

  4. python setuptools

    在安装python依赖库时,我们使用pip install 或者python setup.py install. pip 会自己搜索适合的版本,python setup.py 需要下载源码本地安装.但 ...

  5. java HttpClient设置代理

    HttpClient client = new HttpClient(); UsernamePasswordCredentials creds = new UsernamePasswordCreden ...

  6. 新装的SSMS一打开就显示VS许可证过期,但VS又运行正常,解决方法。

    1.出现问题如下图: 2.解决方法 打开控制面板->程序卸载->找到Microsoft Visual Studio *** Shell(****),右击-修复. 3.修复好了,然后重启电脑 ...

  7. Collections -- OrderedDict类

    普通dict(字典)在插入的时候并不记住元素的顺序,迭代器会根据散列表(哈希表)中存储的顺序来生成的.而OrderedDict则会记录元素的顺序,并且在迭代器输出时,会按现在记录的顺序进行遍历. 例: ...

  8. iTOP-4418/6818开发板用户使用手册内容有哪些

                    更多内容分享,请继续期待 iTOP-6818开发板与4418开发板共兼容同一底板: 核心板:::::: 尺寸:50mm*60mm 高度:核心板连接器组合高度1.5mm ...

  9. 使用extjs的页面弹出窗口宽度不能自适应如何解决?

    1.资源趋势详情下钻页面宽度不能自适应,无法点击关闭按钮 var detailWindow = Ext.create("App.view.com.huawei.drp.qoe.vivid.C ...

  10. 西瓜视频蓝光1080P下载方法

    西瓜视频的蓝光画质只能在APP上看,如何获取1080P画质的地址呢? 1.先安装 WinPcap 2.然后安装夜神安卓模拟器NOX 3.NOX模拟器里安装西瓜视频的最新APP,旧版本APP只提供超清模 ...