我需要安排一个触发器来触发每一分钟,下一分钟如果作业仍然在运行,触发器不应该触发并且应该等待另一分钟来检查,如果作业已经完成触发器应该激发谢谢
Ian*_*vis 13
在Quartz 2中,您将需要DisallowConcurrentExecution
在作业类中使用该属性.然后确保你使用类似的东西设置了一键TriggerBuilder.Create().WithIdentity( "SomeTriggerKey" )
为DisallowConcurrentExecution
使用它来确定,如果你的工作已经在运行.
[DisallowConcurrentExecution]
public class MyJob : IJob
{
...
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我没有找到关于monitor.enter或类似的东西,感谢任何方式,另一个答案是该作业应该实现'StatefulJob'接口.作为StatefulJob,只要有一个实例再次运行,另一个实例将无法运行
如果您使用 Quartz.NET,您可以在 Execute 方法中执行类似以下操作:
object execution_lock = new object();
public void Execute(JobExecutionContext context) {
if (!Monitor.TryEnter(execution_lock, 1)) {
return,
}
// do work
Monitor.Exit(execution_lock);
}
Run Code Online (Sandbox Code Playgroud)
我把这个从我的脑海中拉出来,也许有些名称是错误的,但这就是想法:在执行时锁定某个对象,如果在执行时锁定处于打开状态,则先前的作业仍在运行,您只需return;
编辑:Monitor 类位于 System.Threading 命名空间中
归档时间: |
|
查看次数: |
7240 次 |
最近记录: |