【问题标题】:Quartz.Net - Execute A Job Now And Remove Trigger and Job in ADODataStoreQuartz.Net - 立即执行作业并删除 ADODataStore 中的触发器和作业
【发布时间】:2014-04-29 10:28:47
【问题描述】:

我希望能够使用告诉作业现在执行的触发器动态创建作业,并在作业执行时在 asp.net 应用程序中提供加载对话框。作业完成后,我想删除关联的作业,并从 QRTZ_DB 触发。我提供了两种执行作业的方法:1)立即运行(我已经说明的问题)2)Schdeule 作业..一旦我开始工作,我计划实施。

另外,如果有人可以评论如何在完成执行该类型的所有实例之前不允许执行作业。在下一个启动之前,我遇到了一些工作没有足够时间执行的问题。

谢谢

【问题讨论】:

  • SimpleTrigger("", DataTime.UTCNow) //在指定时间执行job,不重复

标签: c# asp.net-mvc quartz.net


【解决方案1】:

IStatefulJob 已弃用,请使用 DisallowConcurrentExecution 属性装饰您的类。

【讨论】:

    【解决方案2】:

    限制给定作业类型的并发执行的唯一方法是让该作业实现 IStatefulJob 而不是 IJob。

    【讨论】:

      【解决方案3】:

      IStatefulJob 之外的另一种方式

      根据你的描述,你可以使用锁和一个对象,比如

      static Object obj=new Object();//class field
      
      .........
      lock(obj)
      {
          your logic goes here.
      }
      

      或者像这样的,

      //class field
      static Object obj=new Object();
      bool executing=false;
      .....
      
      if(executing)
          return;
      lock(obj)
      {
          executing=true;
          your logic goes here.
      }
      executing=false;
      

      【讨论】:

      • 我认为这行不通,因为石英每次都会实例化你的类的一个新实例。
      • 谢谢你,Taylor。我明白你的想法了。我们可以使用静态对象来同步逻辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      相关资源
      最近更新 更多