c# - 如何忽略 Quartz.Net 中的失火?

标签 c# c#-4.0 quartz.net quartz.net-2.0

这是我的 Quartz 配置:

  <quartz>
    <add key="quartz.scheduler.instanceName" value="EmailScheduler" />
    <!-- Configure Thread Pool -->
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="10" />
    <add key="quartz.threadPool.threadPriority" value="Normal" />
    <!-- Configure Job Store -->
    <add key="quartz.jobStore.misfireThreshold" value="60000" />
    <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
    <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz" />
    <add key="quartz.jobStore.dataSource" value="default" />
    <add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
    <add key="quartz.dataSource.default.provider" value="SqlServer-20" />
    <add key="quartz.dataSource.default.connectionString" value="data source= ......" />
    <add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
  </quartz>

这是我的IInterruptableJob:

public class JobC : Quartz.IInterruptableJob
{
    public void Interrupt()
    {
        Console.WriteLine("Job Interrupt() called at " + DateTime.Now);
    }

    public void Execute(IJobExecutionContext context)
    {
        // what code I should write here to detect misfires???
        Console.WriteLine("FireTime at " + context.FireTimeUtc.Value + " PreviousFireTime at:" + (context.PreviousFireTimeUtc.HasValue ? context.PreviousFireTimeUtc.Value.ToString() : "NULL"));
    }
}

这是我的工作和触发器:

var job = JobBuilder.Create<JobC>().WithIdentity(new JobKey("JobC")).RequestRecovery(true).Build();
var trigger = TriggerBuilder.Create()
    .WithSimpleSchedule(x => x
        .RepeatForever()
        .WithIntervalInSeconds(2)
            // I'm ignoring misfires here, but seems it doesn't work!
        .WithMisfireHandlingInstructionIgnoreMisfires())
    .StartNow()
    .Build();

var scheduler = new Quartz.Impl.StdSchedulerFactory().GetScheduler();
scheduler.Start();
scheduler.ScheduleJob(job, trigger);

在我调用 scheduler.PauseAll() 之后,所有作业都暂停,在调用 scheduler.ResumeAll() 之后,所有未触发的任务都被解雇了!但我想忽略它们,从现在开始继续。

提前致谢。

最佳答案

您确定您的触发器符合定义的失火阈值吗?如果您的配置状态为 60 秒的阈值,则每个未被视为未触发但已达到预定触发时间的触发器将在恢复后尽快触发。

因此,如果您的暂停持续时间达到最小阈值(在本例中为 60 秒),您应该会看到忽略行为。

关于c# - 如何忽略 Quartz.Net 中的失火?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13264115/

相关文章:

c# - 如何在asp图表控件中将错误消息显示到图表中

c#-4.0 - 访问修改后的闭包 - ref int

c# - 表达式 lambda 和语句 lambda 的区别

log4net - Quartz.NET - 找不到配置部分 <common/logging> - 抑制日志输出

c# - WPF 导航和旋转背景

c# - Azure 无法访问存储在应用服务配置中的连接字符串

c# - Quartz.NET/CaSTLe Windsor Integration XmlInterpreter异常

c# - .net Core Quartz 依赖注入(inject)

c# - 这个表达有什么问题?无法将类型 'int' 隐式转换为 'byte'

ruby - 如何使用 IronRuby 解析 Ruby 代码?