Quartzの簡単な使い方

2401 ワード

1、Nuget初期化Quartzパッケージ
プロジェクトの下にある依存項目を右クリック->nugetパッケージの管理->Quartzを参照して検索し、その後のインストール(バージョン3.0.4をインストール)を選択して、弾き出された承認ライセンスで承認を選択します.
ReportJobクラスを新規作成し、以下に示すようにIJobインタフェースを実装します.
 
 [PersistJobDataAfterExecution]
    [DisallowConcurrentExecution]
    public class ReportJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            var reportDirectory = string.Format("~/reports/{0}/", DateTime.Now.ToString("yyyy-MM"));
            reportDirectory = System.Web.Hosting.HostingEnvironment.MapPath(reportDirectory);
            if (!Directory.Exists(reportDirectory))
            {
                Directory.CreateDirectory(reportDirectory);
            }
            var dailyReportFullPath = string.Format("{0}report_{1}.log", reportDirectory, DateTime.Now.Day);
            var logContent = string.Format("{0}==>>{1}{2}", DateTime.Now, "create new log.", Environment.NewLine);
           
             return Task.Factory.StartNew(() => File.AppendAllText(dailyReportFullPath, logContent));
        }
    }

タイミング起動方法は以下の通りです
public static async Task RunScheduler()
        {
            try
            {
                IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
                //  
                CronScheduleBuilder builder = CronScheduleBuilder.CronSchedule("30 * * * * ?");//        
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger", "group")
                    .StartNow()
                    .WithSchedule(builder)
                    .Build();
                IJobDetail job = JobBuilder.Create()//        Myclass   start  
                    .WithIdentity("job", "group")
                    .Build();
                //      
                await scheduler.ScheduleJob(job, trigger);

                //    
                await scheduler.Start();
                //    
                //await scheduler.Shutdown(true);
            }
            catch (SchedulerException se)
            {
                Console.WriteLine(se);
            }

        }

タイミングタスクを呼び出すコードは次のとおりです.
RunScheduler().GetAwaiter().GetResult();

このような簡単なタイミングタスクが完了しました.