空の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は、タスクを区別するために使用することができます。