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 中做 RequestSession 等和 Web 相关的工作。
  

 

posted @ 2017-08-12 10:42  醒醒,天亮了  阅读(425)  评论(0编辑  收藏  举报