クォーツタイマータスクフレームワークのデモ

空のWebプロジェクトをビルドするために開始します。

逃げるために猛烈に新しいクラスQuartzFactoryコピーを作成します。

  パブリック クラスQuartzFactory:IJobFactory 
    { 
        プライベート 読み取り専用IServiceProvider _serviceProvider。

        公共QuartzFactory(IServiceProviderサービスプロバイダ)
        { 
            _serviceProvider = サービス・プロバイダ。
        } 

        パブリックIJob NewJob(TriggerFiredBundleバンドルISchedulerスケジューラ)
        { 
             jobDetail = bundle.JobDetail。

            ジョブ= (IJob)_serviceProvider.GetService(jobDetail.JobType)。
            リターンの仕事。
        } 

        公共 ボイドReturnJob(IJobジョブ)
        {
        } 
    }

QuartzJob

パブリック クラスQuartzJob:IJob 
    { 
        ロガーロガー = LogManager.GetCurrentClassLogger()。
        公共の 非同期タスクの実行(IJobExecutionContextコンテキスト)
        { 
            VAR jobKey = context.JobDetail.Key。// 获取仕事信息
            VAR triggerKey = context.Trigger.Key。// 获取トリガー信息--jobWork1 --jobWork2 

            logger.Info($ " {} DateTime.Now QuartzJob:。== >>自动执行\ rを\ nは{jobKey.Name} | {triggerKey.Name} \ rを\ nは" );
            待つTask.CompletedTaskを。
        } 
    }

QuartzService

  公共の 静的な クラスQuartzService 
    { 
        #region单任务
         パブリック 静的な 無効 StartJob <TJob>()TJob:IJob 
        { VARのスケジューラは= 新しいStdSchedulerFactory()GetScheduler()結果;。。VaRの仕事= JobBuilder.Create <TJob> ()
            .WithIdentity(" 仕事" 
            .Build(); VAR TRIGGER1 = TriggerBuilder.Create()
            .WithIdentity(" job.trigger " 
            .StartNow()
          
 
          
 
          
            .WithSimpleSchedule(X => x.WithInterval(TimeSpan.FromSeconds(5 ))RepeatForever()。)
            .ForJob(ジョブ)
            .Build(); 
 
          scheduler.AddJob(仕事、真の); 
          scheduler.ScheduleJob(ジョブ、TRIGGER1)。
          scheduler.Start(); 
        } 
        #endregion 
 
        #region多任务
         パブリック 静的 ボイド StartJobs <TJob>()TJob:IJob 
        { VARのスケジューラは= 新しいStdSchedulerFactory()GetScheduler()は、結果;。VaRの仕事= JobBuilder.Create <TJob> ()
          
 
          
            .WithIdentity(" ジョブ" 
            .Build(); 
 
          VAR TRIGGER1 = TriggerBuilder.Create()
            .WithIdentity(" jobWork1 " 
            .StartNow()
            .WithSimpleSchedule(X => x.WithInterval(TimeSpan.FromSeconds(5 ))。RepeatForever())
            .ForJob(ジョブ)
            .Build() ; 
 
          VARトリガ2 = TriggerBuilder.Create()
            .WithIdentity(" jobWork2 " 
            .StartNow()
            .WithSimpleSchedule(X => x.WithInterval(TimeSpan.FromSeconds(11 ))。RepeatForever())
            .ForJob(ジョブ)
            .Build(); 
 
          VaRの辞書= 新しい辞書<IJobDetail、IReadOnlyCollection <ITrigger >> 
          { 
            {ジョブ、新しい HashSetの<ITrigger> {TRIGGER1、トリガ2}} 
          }。
          scheduler.ScheduleJobs(辞書、真の); 
          scheduler.Start(); 
        } 
        #endregionの
 
        #region配置
         パブリック 静的 ボイド AddQuartz(この IServiceCollectionサービス、paramsは []ジョブを入力します)
        { 
          services.AddSingleton <IJobFactory、QuartzFactory>()。
          services.Add(jobs.Select(JOBTYPE => 新しいServiceDescriptor(JOBTYPE、JOBTYPE、ServiceLifetime.Singleton)))。
 
          services.AddSingleton(プロバイダ => 
          { 
            VARの schedulerFactory = 新しいStdSchedulerFactory();
             VARのスケジューラ= schedulerFactory.GetScheduler()は、結果; 
            scheduler.JobFactory = provider.GetService <IJobFactory> (); 
            scheduler.Start(); 
            戻りスケジューラ; 
          } ); 
        } 
        #endregion 
    }
コードの表示

上記のコードでコードを読み取ります

  VARトリガ2 = TriggerBuilder.Create()
            .WithIdentity( "jobWork2")
            .StartNow()
            .WithSimpleSchedule(X => x.WithInterval(TimeSpan.FromSeconds(11))。RepeatForever())
            .ForJob(ジョブ)
            .Build() ;


WithIdentity()
時間がQuartzJobクラスを広がっていく、括弧列
Iは主に仕事のタイミングを決定するために、この文字列を使用するには、あなたは、特定のタスクを実行する必要があります。

 

WithSimpleSchedule(X => x.WithInterval(TimeSpan.FromSeconds(11))。RepeatForever())

TimeSpan.FromSeconds(11)は、時間、あなたのタイミングであります。

数回も毎日。CronScheduleBuilder.DailyAtHourAndMinute(16、10)  

これはもちろん、あなたはこれらのクラスは役に立たない、コピー、毎日実行する午前16時10分を計時さ。それがあるので、プロジェクトの中核タスクが登録されます。

 


起動クラス
公共 のボイドConfigureServices(IServiceCollectionサービス)
        { 
            services.AddMvc();   // 注册MVC服务   
            services.AddQuartz(typeof演算(QuartzJob)); 
        } 

        // このメソッドはランタイムによって呼び出されます。HTTPリクエストパイプラインを設定するには、このメソッドを使用します。
        公共 ボイド設定(IApplicationBuilderアプリ、IHostingEnvironmentのENV、ILoggerFactory loggerFactory)
        { 
            場合(env.IsDevelopment())
            { 
                app.UseDeveloperExceptionPage()。
            } 

            // 使用NLog作为日志记录工具
            loggerFactory.AddNLog();
             // 導入Nlogプロファイル 
            env.ConfigureNLog(" Nlog.config " ); 

            QuartzService.StartJobs <QuartzJob>();   // マルチタスキング

            // QuartzService.StartJob <QuartzJob>();   // シングルタスク

            app.UseMvc(ルート => {      // MVC開く
                routes.MapRoute(
                    名称:" デフォルト" 
                    テンプレート:" {HOME}は=をコントローラ/アクション= {キーワード} / {}上記のIDを言及しました?" 
                    ); 
            });
        }

それが実行できるように。

 

私は、ログNlogを使用してデモを書くので。

 

 私たちは、jobWork1を見ることができるし、2は、タスクを区別するために使用することができます。

 

おすすめ

転載: www.cnblogs.com/ya-jun/p/11766122.html