タスクの実現のタイミングを理解するための簡単でクォーツのC#

アドレス重版:https://www.cnblogs.com/wendj/archive/2018/09/18/9670412.html 

スケジューリングのための優れたオープンソースのフレームワークとして、クォーツは次の特性があります。

  1. そのようなスケジューリングの様々な方法のサポートなどの強力なスケジュール機能、従来と特別なニーズの多様性を満たすために。
  2. このような組み合わせおよびスケジューリングのさまざまなタスクのサポートなど、柔軟な適用方法、スケジュールデータ記憶装置の様々なサポートしています。
  3. 分散とクラスタリング機能、テラコッタの取得後、さらにオリジナルの基盤の機能を強化するために作られました。

      さらに、デフォルト・スケジューリング・フレームワークばねとして、石英は容易スプリング設定実装柔軟なスケジューリング機能が統合されています。

    石英コア要素のスケジュール:

  1. スケジューラ:タスクスケジューラ、タスクのスケジューリングは、コントローラの実際の実装です。SchedulerFactoryBeanにより封入春。
  2. トリガー:タスクスケジューリングルール定義のためのトリガ時間、そこSimpleTrigger、CronTrigger、DateIntervalTriggerとNthIncludedDayTrigger、CronTriggerがより使用され、この論文は、方法について説明します。パッケージ内の春にCronTrigger CronTriggerFactoryBean。
  3. カレンダー:それは時間のカレンダーの特定の点の集合です。除外または時間の特定のポイントを含むようにトリガーは、カレンダーの複数を含んでもよいです。
  4. JobDetail:そのようなジョブ名、およびリスナーに関連する他の情報として、静的およびその他の関連情報を記述するために使用されるジョブの実装クラス。2つの実装JobDetailFactoryBeanとMethodInvokingJobDetailFactoryBeanは唯一のクラスのタスクスケジューリング方法を実行する必要がある場合、あなたはMethodInvokingJobDetailFactoryBeanによって呼び出すことができ、春にあります。
  5. 仕事:インタフェースはJobExecutionContextクラスは、スケジューリングコンテキストに関する情報を提供し、タスクを実装するためのインターフェースの開発者によって定義されたボイドは(JobExecutionContextコンテキスト)を実行する唯一の方法は、実行されています。JobDataMapインスタンスジョブの実行時に保存された情報。春のジョブのタスクを達成するためのインタフェース、デフォルトはステートレスで、ジョブが状態を持つように設定されているため、仕事@DisallowConcurrentExecutionは石英に注釈を追加達成することである(旧StatefulJobインタフェースは廃止された実現)、パラメータの組み合わせは、同時ジョブの詳細春の設定ファイルを設定することができます。

私はここだけで、プロセスを記録し、コードを使用しています:

1:クォーツコンポーネントへのすべての参照の初

2:石英を用いました。Quartz.Implを使用しました。

注意:ローカルコンソールプロジェクトを作成し、使用するには、過去に以下のコードをコピーして、あなただけのExecuteメソッドをオーバーライドする必要があります。Quartz3.0とバージョンが使用される非同期である上に、次のバージョン3.0は、同じ方法を使用して、非同期で使用していません

主な機能・エントリのファイル:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using  BackgroundTask.job;
using  log4net;
using  Quartz;
using  Quartz.Impl;
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Threading.Tasks;
 
namespace  BackgroundTask
{
     class  Program
     {
         private  static  readonly  ILog _log = LogManager.GetLogger( typeof (Program));
 
         private  static  readonly  string  tiggerName =  "TestJobTrigger" ;
         private  static  readonly  string  gropName =  "TestJobTriggerGrop" ;
         private  static  readonly  string  jobName =  "TestJob" ;
         //从工厂中获取一个调度器实例化
         private  static  IScheduler scheduler =  null ;
 
 
         static  void  Main( string [] args)
         {
             Console.WriteLine( "开始任务...." );
             _log.Debug( "开始任务...." );
             Start();
 
         }
 
         private  static  async  void  Start()
         {
             //从工厂中获取一个调度器实例化
             scheduler = await StdSchedulerFactory.GetDefaultScheduler();
             await scheduler.Start();
 
 
             //创建一个作业
             IJobDetail job1 = JobBuilder.Create<TestJob>()
              .WithIdentity(jobName, gropName)
              .UsingJobData( "key" , "value" ) // 传递参数 在Execute方法中获取(以什么类型值传入,取值就用相应的类型方法取值)
              .Build();
 
             // 创建触发器
             ITrigger trigger1 = TriggerBuilder.Create()
                                         .WithIdentity(tiggerName, gropName)
                                         .StartNow()                         //现在开始
                                         .WithSimpleSchedule(x => x          //触发时间,10秒一次。
                                             .WithIntervalInSeconds(10)
                                             .RepeatForever())               //不间断重复执行
                                         .Build();
 
 
             await scheduler.ScheduleJob(job1, trigger1);       //把作业,触发器加入调度器。
 
             Console.ReadKey();
 
             // 清除任务和触发器
             ClearJobTrigger();
         }
 
         /// <summary>
         /// 清除任务和触发器
         /// </summary>
         private  static  void  ClearJobTrigger()
         {
             TriggerKey triggerKey =  new  TriggerKey(tiggerName, gropName);
             JobKey jobKey =  new  JobKey(jobName, gropName);
             if  (scheduler !=  null )
             {
                 scheduler.PauseTrigger(triggerKey);
                 scheduler.UnscheduleJob(triggerKey);
                 scheduler.DeleteJob(jobKey);
                 scheduler.Shutdown(); // 关闭
             }
 
         }
 
     }
 
}

  

实现IJob 接口的任务文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using  log4net;
using  Quartz;
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Threading.Tasks;
 
namespace  BackgroundTask.job
{
     public  class  TestJob : IJob
     {
         private  readonly  ILog _log = LogManager.GetLogger( typeof (TestJob));
         /// <summary>
         /// 测试作业
         /// </summary>
         /// <param name="context"></param>
         /// <returns></returns>
         public  async Task Execute(IJobExecutionContext context)
         {

        JobDataMap dataMap = context.JobDetail.JobDataMap;
        string k = dataMap.GetString("key");//获取参数(可根据传递的类型使用GetInt、GetFloat、GetString.....)

1
2
3
4
5
6
7
8
             _log.Debug( "run TestJob debug" );
             _log.Error( "run TestJob error" );
             _log.Info( "run TestJob info" );
             // 在这里处理你的任务
             
         }
     }
}<br><br>

おすすめ

転載: www.cnblogs.com/blogsaspx/p/10995947.html