• Quartz 线程处理


    官网

    http://www.quartz-scheduler.net/

    相关的 Log 说明

    http://netcommon.sourceforge.net/docs/2.1.0/reference/html/index.html

    博客园友>> 懒惰的肥兔  (他写不少相关的文章,值得一读)

    http://www.cnblogs.com/lzrabbit/archive/2012/04/15/2448326.html

    有很多人问Quartz启动后,关闭服务时无法及时关闭,必须杀进程才可以,解决方法时在调用Shutdown方法时传入参数false,即不等待任务运行结束立即关闭

    scheduler.Shutdown(false);
    

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Quartz.net  2.0 版本有个地方特别需要注意; 在 App.config 里的 factoryAdapter不再是Log4Net取而代之的是Log4Net1211;

    <logging>
          <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1211">
            <arg key="configType" value="INLINE"/>
          </factoryAdapter>
        </logging>

    Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。

    有一个属性可以变更默认

        //串行执行的属性。
     [Quartz.DisallowConcurrentExecution]
        public class IJob : Quartz.IJob
        {
            public void Execute(Quartz.IJobExecutionContext context)
            {
    }
    }

    @DisallowConcurrentExecution

    此标记用在实现Job的类上面,意思是不允许并发执行,按照我之前的理解是 不允许调度框架在同一时刻调用Job类,后来经过测试发现并不是这样,而是Job(任务)的执行时间[比如需要10秒]大于任务的时间间隔 [Interval(5秒)],那么默认情况下,调度框架为了能让 任务按照我们预定的时间间隔执行,会马上启用新的线程执行任务。否则的话会等待任务执行完毕以后 再重新执行!(这样会导致任务的执行不是按照我们预先定义的时间间隔执行)

    设定的时间间隔为3秒,但job执行时间是5秒,设置@DisallowConcurrentExecution以后程序会等任务执行完毕以后再去执行,否则会在3秒时再启用新的线程执行

  • 相关阅读:
    技术晨读_20160611
    浏览器退出之后php还会继续执行么?
    大话keepalive
    也说说TIME_WAIT状态
    PHP的错误机制总结
    ASP.NET MVC中使用Unity Ioc Container
    Unity依赖注入使用详解
    小菜学习设计模式(五)—控制反转(Ioc)
    程序员的人性思考(续)
    Delegate、Predicate、Action和Func
  • 原文地址:https://www.cnblogs.com/Fooo/p/4770042.html
Copyright © 2020-2023  润新知