Quartz.Net的簡單使用

一、安裝Quartz.Netui

      Install-Package Quartz -Version 2.5.0
spa

二、須要執行定時任務的代碼,新建一個類,繼承IJob接口,並實現該接口.net

     

 public class TestJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                Console.WriteLine("當前時間是" + DateTime.Now.ToString());
            }
            catch (Exception ex)
            {

                throw;
            }           
        }
    }

三、在程序中須要執行這個定時任務的地方寫以下代碼線程

   計劃者( IScheduler)、工做( IJob)、觸發器( Trigger)。給計劃者一個工做(Job),讓他在 Trigger(什麼條件下作這件事) 觸發的條件下執行這個工做(Job)
調試

 static void Main(string[] args)
        {
            IScheduler sched = new StdSchedulerFactory().GetScheduler();
            JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(TestJob));
            IMutableTrigger triggerBossReport = CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(23, 41).Build();//天天 23:45 執行一次
            triggerBossReport.Key = new TriggerKey("triggerTest");
            sched.ScheduleJob(jdBossReport, triggerBossReport);
            sched.Start();
        }

其餘定時任務: 日誌

 CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(13, 55,DayOfWeek.Friday, DayOfWeek.Sunday) //每週5、週日的 13:55 執行;
 CronScheduleBuilder.WeeklyOnDayAndHourAndMinute()                            //每週固定時間
CronScheduleBuilder.MonthlyOnDayAndHourAndMinute() //每個月固定時間

 

 static void Main(string[] args)
        {
            IScheduler sched = new StdSchedulerFactory().GetScheduler();
            JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(TestJob));

            CalendarIntervalScheduleBuilder builder = CalendarIntervalScheduleBuilder.Create();
            builder.WithInterval(3, IntervalUnit.Second);//每 3 秒鐘執行一次
            IMutableTrigger triggerBossReport = builder.Build();            
            triggerBossReport.Key = new TriggerKey("triggerTest");
            sched.ScheduleJob(jdBossReport, triggerBossReport);
            sched.Start();
        }

 

四、須要注意的問題: code

   1)、IJob Execute 中異常問題 :因爲 Job 是運行在單獨的線程中,所以若是 Execute 中若是發生異常,調試的時候也是不會斷點暫停的,好像什麼都沒發生同樣。若是運行在ASP.Net 中,也不會觸發 ASP.net 的「未處理異常處理程序」,就好像任務沒執行同樣。爲了當出現異常的時候咱們能及早發現, 須要把 Execute 的代碼 try...catch...而後把異常處理(好比記錄到日誌)。 blog

   2)、IJob 中怎麼樣 MapPath: 因爲 Job 是運行在單獨的線程中,是拿不到HttpContext.Current 的,那怎麼 MapPath 呢? HostingEnvironment.MapPath()。 也不能在Job 中作 RequestSession 等和 Web 相關的工做。
  

繼承

相關文章
相關標籤/搜索