一、安装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 相关的工做。
继承