一、安裝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 中作 Request、 Session 等和 Web 相關的工做。
繼承