日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發布時間:2023/12/10 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 前奏-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思想的体现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。