分 享

【凤凰社】Quartz.NET常用方法 02

 上一篇里介绍了Job和Trigger的常用方法,这一节将介绍Calendar,它的作用是排除特定的日期时间。

 
Calendar的常用类
DailyCalendar 排除每天某个时间段任务的Run
例子:
        var sche = StdSchedulerFactory.GetDefaultScheduler();
        sche.Start();

        //使任务在10点到11点间不再Run
        DailyCalendar cale = new DailyCalendar(
           DateBuilder.DateOf(10, 0, 0).DateTime,
           DateBuilder.DateOf(11, 0, 0).DateTime
        );
        sche.AddCalendar("myCalendar", cale, true, true); 
 
WeeklyCalendar 排除每周某个星期的任务的Run
例子:
        var sche = StdSchedulerFactory.GetDefaultScheduler();
        sche.Start();
        
        WeeklyCalendar cale = new WeeklyCalendar();
        cale.SetDayExcluded(DayOfWeek.Thursday, true);  //让星期四不触发Schedule
        //cale.SetDayExcluded(DayOfWeek.Thursday, false); //让星期四触发Schedule
        sche.AddCalendar("myCalendar", cale, true, true);
 
HolidayCalendar 排除某一天的任务的Run(如果涉及到同一天跨年的情况,需要多次添加不同年份)
例子:
        var sche = StdSchedulerFactory.GetDefaultScheduler();
        sche.Start();

        HolidayCalendar cale = new HolidayCalendar();
        cale.AddExcludedDate(DateTime.Now.AddYears(-1)); //排除去年的今天不处理
        cale.AddExcludedDate(DateTime.Now); //排除今天不处理
        sche.AddCalendar("myCalendar", cale, true, true);
 
MonthlyCalendar 排除每月某一天的任务的Run
例子:
        var sche = StdSchedulerFactory.GetDefaultScheduler();
        sche.Start();

        MonthlyCalendar cale = new MonthlyCalendar();
        cale.SetDayExcluded(25, true);  //排除每个月25号Run
        sche.AddCalendar("myCalendar", cale, true, true);
AnnualCalendar 排除每年某一天的任务的Run
例子:
        var sche = StdSchedulerFactory.GetDefaultScheduler();
        sche.Start();
        
        AnnualCalendar cale = new AnnualCalendar();
        //12月25号不Run
        cale.SetDayExcluded(new DateTimeOffset(2018, 12, 25, 12, 0, 0, TimeSpan.FromHours(8)), true);  
        sche.AddCalendar("myCalendar", cale, true, true);
 
CronCalendar 通过Cron表达式排除任务的Run
例子:
        var sche = StdSchedulerFactory.GetDefaultScheduler();
        sche.Start();

        //只在营业时间Run8AM-5PM
        CronCalendar cale = new CronCalendar("* * 0-7,18-23 ? * *");

        sche.AddCalendar("myCalendar", cale, true, true);
 
 


0 评论

回复