一. 前奏-Timer类实现定时任务

  在没有引入第三方开源的定时调度框架之前,我们处理一些简单的定时任务同时都是使用Timer类, DotNet中的Timer类有三个,分别位于不同的命名空间下,分别是:

    ①.位于System.Windows.Forms里,即定时器控件,不过多介绍了

    ②.位于System.Threading.Timer类里 (重点介绍)

    ③.位于System.Timers.Timer类里 (不介绍)

  下面重点介绍第二种,位于Threading下面的Timer类,观察其源码,发现有多种构造函数,我们重点介绍其中的一种。

  分享一段代码:2秒后开启该线程,然后每隔4s调用一次。

1           //2秒后开启该线程,然后每隔4s调用一次
2             System.Threading.Timer timer = new System.Threading.Timer((n) =>
3             {
4                 //书写业务逻辑
5                 Console.WriteLine("我是定时器中的业务逻辑哦{0}",n);
6             }, "1", 2000, 4000);

   分析总结:上面的代码显而易见,只能控制:延迟多久开始执行,每隔多久执行一次,至于执行多少次、什么时间关闭均无法实现,更不用说处理一些复杂的时间间隔了,所以Timer类仅仅适合处理对时间要求非常简单的定时任务。

二. 进入主题-Quartz.Net的入门使用

使用步骤:

  前提:通过NuGet引入程序集或者直接下载源码进行引入,然后分五步走。

  步骤一:创建作业调度池(Scheduler)

  步骤二:创建一个具体的作业即job (具体的job需要单独在一个文件中执行)

  步骤三:创建并配置一个触发器即trigger

  步骤四:将job和trigger加入到作业调度池中

  步骤五:开启调度

下面分享一段简单的代码(立即执行、每隔一秒执行一次、永久执行)

 1        /// <summary>2         /// Quartz框架的使用3         /// </summary>4         public static void Show()5         {6             //1.创建作业调度池(Scheduler)7             IScheduler scheduler =StdSchedulerFactory.GetDefaultScheduler();8            9             //2.创建一个具体的作业即job (具体的job需要单独在一个文件中执行)
10             var job = JobBuilder.Create<HelloJob>().Build();
11
12             //3.创建并配置一个触发器即trigger   1s执行一次
13             var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(1)
14                                                                            .RepeatForever()).Build();
15             //4.将job和trigger加入到作业调度池中
16             scheduler.ScheduleJob(job, trigger);
17
18             //5.开启调度
19             scheduler.Start();
20         }

 1     /// <summary>2     /// 实现IJob接口3     /// </summary>4     class HelloJob : IJob5     {6         void IJob.Execute(IJobExecutionContext context)7         {8             Console.WriteLine("Hellow JOB");9         }
10     }

  分析:每个Job都需要实现IJob接口,并且显式的实现Execute方法;创建调度器除了上述方法外,还可以:

1   //另外一种创建调度池的方法
2   var factory = new StdSchedulerFactory();
3   IScheduler scheduler2 = factory.GetScheduler();

  执行结果:

三. 扩展-Aop思想的体现

  我们想在每次Job执行的前后,分别执行一段通用的业务,但有不想和原业务写在一起,这个时候就需要面向切面编程了,即AOP思想的体现。

  Quartz.Net中Aop思想通过JobListener来实现,代码如下:

 1         /// <summary>2         /// Quartz中的AOP思想3         /// </summary>4         public static void AopShow()5         {6             //1.创建Schedule7             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();8             9             //2.创建job (具体的job需要单独在一个文件中执行)
10             var job = JobBuilder.Create<HelloJob>().Build();
11
12             //3.配置trigger   1s执行一次
13             var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(1)
14                                                                            .RepeatForever()).Build();
15             //AOP配置
16             scheduler.ListenerManager.AddJobListener(new MyAopListener(), GroupMatcher<JobKey>.AnyGroup());
17
18             //4.将job和trigger加入到作业调度池中
19             scheduler.ScheduleJob(job, trigger);
20
21             //5. 开始调度
22             scheduler.Start();
23         }
24     /// <summary>
25     /// Aop类
26     /// </summary>
27     public class MyAopListener : IJobListener
28     {
29         public string Name
30         {
31             get
32             {
33                 return "hello world";
34             }
35         }
36         public void JobExecutionVetoed(IJobExecutionContext context)
37         {
38
39         }
40         public void JobToBeExecuted(IJobExecutionContext context)
41         {
42             Console.WriteLine("执行前写入日志");
43         }
44         public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
45         {
46             Console.WriteLine("执行后写入日志");
47         }
48     }

  执行结果:

第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现相关推荐

  1. 辛星跟您玩转vim第一节之vim的下载与三种模式

    首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...

  2. matlab简单程序实例_visual basic VB.NET实例系列教程第一节(简单实用抽奖程序)...

    近期疫情原因,工作比较不忙,所以打算出一套零基础,VB.NET实例系列入门教程,实用又好玩,带大家进入VB的编程世界里,希望这套图文教程能帮到有需要的人! 第一节(简单实用抽奖程序) 内容准备:编译环 ...

  3. (王道408考研操作系统)第四章文件管理-第一节7:文件共享

    文章目录 一:基于索引结点的共享方式(硬链接) (1)介绍 (2)Linux演示 二:基于符号链的共享方式(软链接) (1)介绍 (2)Linux演示 所谓文件共享就是指 使多个用户(进程)共享同一个 ...

  4. visual basic VB.NET实例系列教程第一节(简单实用抽奖程序)

    近期疫情原因,工作比较不忙,所以打算出一套零基础,VB.NET实例系列入门教程,实用又好玩,带大家进入VB的编程世界里,希望这套图文教程能帮到有需要的人! 第一节(简单实用抽奖程序) 内容准备:编译环 ...

  5. ABOV 第一节 ABOV 程序生成器的使用 2021-11-11

    ABOV 程序 第一节 ABOV 程序生成器的使用 ABOV官网 文章目录 ABOV 程序 前言 一.ABOV是什么? 二.使用步骤 1.选择需要用到的IC资料 2.利用软件初步生产IC配置文件 3. ...

  6. 初一第一节计算机课,初中信息技术第一节课-常规教育ppt课件

    <初中信息技术第一节课-常规教育ppt课件>由会员分享,可在线阅读,更多相关<初中信息技术第一节课-常规教育ppt课件(17页珍藏版)>请在人人文库网上搜索. 1.欢迎走进信息 ...

  7. 计算机动画制作第一节教案,付雪_ 第四章动画制作_第一节制作逐帧动画——教案设计(7页)-原创力文档...

    信息技术课堂教学设计 教学内容 第四章 第一节 制作"逐帧"动画 学 校 北京市高井中学 授课教师 付 雪 课 型 新授课 课 时 1 日 期 教学 目标 = 1 \* GB1 ⒈ ...

  8. 欧阳萍经典听口班第四季_第一节:餐厅里_学习笔记

    欧阳萍经典听口班第四季 第一节:餐厅里 主要学习方法 1.echo练口语听力方法总体先听一遍,此时大概率听不懂1.一句一句话的听2.看着字幕在脑子里想一遍本句话3.自己复述本句话4.如有听不懂则反复练 ...

  9. 如何建立图像数据矩阵和图像显示灰度之间的关系!_放射技术考试第四章第一节 数字图像的特征...

    第四章第一节   数字图像的特征 一.模拟与数字 (一)模拟信号 在信息科学中,能够计数的离散量称为数字信号(整数),不能计数的连续量称为模拟信号. 模拟是以某种范畴的表达方式如实地反映另一种范畴.例 ...

最新文章

  1. 叉叉助手停运有什么替代的_亚马逊全球开店助手将停止服务!卖家:终究是错付了...
  2. hibernate中的一级缓存
  3. Morph-UGATIT:一种支持渐进式域迁移的图像翻译方法
  4. java 在已有的so基础上封装jni_webshell中的分离免杀实践java篇
  5. 基于JAVA+SpringBoot+Mybatis+MYSQL的汽车租赁系统
  6. asp.net MVC中怎样让LINQ Designer自动生成的类从别的类继承并调用其基类构造器?...
  7. css 列表内容滚动,stroll.js 炫酷的 CSS3 列表滚动动画集合 - 文章教程
  8. 数据结构-------赫夫曼树
  9. 拓端tecdat|R语言旅行推销员问题TSP
  10. 深入浅出数据分析 - 数据分析引言
  11. 华为A1路由器虚拟服务器,华为a1路由器怎么设置
  12. Postgresql使用技巧
  13. 单元二:全桥MOS/IGBT电路(后端全桥电路的搭建)
  14. 解决excel转pdf出现的折行问题
  15. PostgreSQL 简介
  16. 6开机白苹果一闪一灭_苹果6s开机一直显示白苹果,过会就直接黑屏,重复一直这样...
  17. 经常说的ROI是什么,怎么计算
  18. 耗时3个多月、总结过往5年,马毅曹颖沈向洋撰文智能两大原则
  19. 输入5V,输出5V限流芯片,可调限流至4.8A
  20. ali的ons mq运行一段时间后消费下降并导致堆积问题查验

热门文章

  1. python学习第19天
  2. Java——操作集合的工具类:Collections
  3. ASP.NET MVC Global.cs - 应用程序事件
  4. iOS 直接使用16进制颜色
  5. React Canvas:高性能渲染 React 组
  6. JS中关于clientWidth、offsetWidth、scrollWidth
  7. 2012.2.18-silverlight设计器崩溃
  8. 开源CRM Hipergate
  9. ckedit 3.0 配置(一)
  10. java aac rtp封装_分享一段H264视频和AAC音频的RTP封包代码