Quartz.Net的簡單使用
1、安裝Quartz.Net
Install-Package Quartz -Version 2.5.0
2、需要執行定時任務的代碼,新建一個類,繼承IJob接口,并實現該接口
public class TestJob : IJob { public void Execute(IJobExecutionContext context) { try { Console.WriteLine("當前時間是" + DateTime.Now.ToString()); } catch (Exception ex) { throw; } } }
3、在程序中需要執行這個定時任務的地方寫如下代碼
計劃者( 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) //每周五、周日的 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(); }
4、需要注意的問題:
1)、IJob 的 Execute 中異常問題 :由于 Job 是運行在單獨的線程中,因此如果 Execute 中如果發生異常,調試的時候也是不會斷點暫停的,好像什么都沒發生一樣。如果運行在ASP.Net 中,也不會觸發 ASP.net 的“未處理異常處理程序”,就好像任務沒執行一樣。為了當出現異常的時候我們能及早發現, 需要把 Execute 的代碼 try...catch...然后把異常處理(比如記錄到日志)。
2)、IJob 中怎么樣 MapPath: 由于 Job 是運行在單獨的線程中,是拿不到HttpContext.Current 的,那怎么 MapPath 呢? HostingEnvironment.MapPath()。 也不能在Job 中做 Request、 Session 等和 Web 相關的工作。

浙公網安備 33010602011771號