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 相关的工作。

最新文章

  1. OAF_开发系列29_实现OAF中批次处理迭代器RowSet/RowSetIterator(案例)
  2. InnoDB配置文件复习
  3. Qt Creator 中关于调试器的设置
  4. selenium-webdriver(python) (十) 如何处理下拉框
  5. RDD机制实现模型Spark初识
  6. [Effective C++ --021]必须返回对象时,别妄想返回其reference
  7. oracle 定义临时表
  8. odoo 清除所有运行数据
  9. MyBatis Generator generatorConfig.xml配置详解
  10. 浅谈设计模式在GIS中的应用
  11. FreeMarker整合Spring 3(转)
  12. java String不可变对象,但StringBuffer是可变对象
  13. 探索从 MVC 到 MVVM + Flux 架构模式的转变
  14. 如何做活动页面的滚动动画?让用户体验MAX的demo在这里!
  15. 剑指offer(32)把数组排成最小的数
  16. python大法好——模块(内置模块未完)
  17. day14 Python集合的补充
  18. Python之打印变量
  19. 'node' 不是内部或外部命令,也不是可运行的程序或批处理文件
  20. Matlab 编程入门(一):编程基础

热门文章

  1. supervisor管理java进程
  2. 深入解读.NET MAUI音乐播放器项目(一):概述与架构
  3. Vue15 v-for和key的作用及原理
  4. ROS入门:话题
  5. 记录一次vue部署docker步骤
  6. 【KAWAKO】MobaXterm-使用MobaSSHTunnel进行端口映射
  7. pytest基本使用指南
  8. 东方CannonBall
  9. 【C++复习】运算符重载中的特殊运算符
  10. 云服务器 CentOS 的使用历程