A. -timerクラスは、定期的なタスクのプレリュードを実装します
スケジューリングフレームワークなしに第三者のオープンソースを導入するタイミングの前に、我々は同じタイミングで単純なタスクを扱うTimerクラスを使用している、過去ログTimerクラス3は、すなわち、異なる名前空間に配置されています。
①。そのタイマー制御に位置のSystem.Windows.Formsが、よりを導入
②。位置System.Threading.Timerクラス(ハイライト)
③。でSystem.Timers.Timer配置クラス(記載されていません)
スレッディングTimerクラスの下方に位置する第2の次のハイライト、ソースを観察するには、我々はコンストラクタのさまざまなを発見し、我々はそれらのいずれかに焦点を当てます。
スレッド投入後、2秒、その後、すべての4S回呼び出さ:コードの一部を共有します。
1 // 2秒のスレッドをオンにした後、その後、一度呼び出さごと4S 2 System.Threading.Timerタイマー= 新しい新しい System.Threading.Timerは((N-)=> 。3 { 4 // ビジネスロジックを書く 。5 Console.WriteLineを(" I OHタイマビジネスロジック0} { " N-); 6 }、" 1 "、2000、4000)。
分析の概要:上記のコードは明らかである、のみ制御することができます。遅延が開始どのくらい、頻繁に達成することができない閉じた何時間、実行する回数を通り、一度実行する方法、複雑な時間間隔でのみ取引をしましょう、これだけTimerクラスタイムクリティカルなタスクの非常に単純なタイミングを扱うのに適し。
II。テーマ-Quartz.Net使用に取得します
これらの手順を実行します。
前提:NuGetアセンブリを導入することによって、またはソースコードをダウンロードを導入した後、5歩の距離。
ステップ1:ジョブスケジュールプール(スケジューラ)を作成します。
ステップ2:特定のジョブであるジョブを作成する(単一の実行ファイル内のジョブ固有のニーズ)
ステップ3:トリガーでトリガーを作成して構成
ステップ4:トリガーは、ジョブとジョブスケジューラプールに追加されます
步骤五:开启调度
下面分享一段简单的代码(立即执行、每隔一秒执行一次、永久执行)
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 : IJob 5 { 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.创建Schedule 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 //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 }
执行结果: