即使有任何异常,Quartz.net作业也会在下一次迭代中运行

时间:2016-08-31 14:57:24

标签: c#-4.0 quartz-scheduler quartz.net

可能是一个愚蠢的问题......但无论如何都要进行......

我想知道,如果在当前迭代中存在异常(处理),则quartz.net作业是否将在下一次迭代中运行。如果我的理解是正确的,有人可以解释一下吗?

public void Execute(IJobExecutionContext context)
{
    _logProvider.Info("Started..");

    try
    {
        _service.Calculate();
    }
    catch (Exception ex)
    {
        _logProvider.Error("Error " + ex);
    }
}

由于

1 个答案:

答案 0 :(得分:2)

The simple answer is: yes, it will execute on next iteration.

Actually this is related to general .NET exception handling, rather then quartz.net behaviour: if you have function that catches any exceptions - exceptions will not be visible outside of that function. In other words, code like

public void SomeMethod()
{
    try
    {
        //some logic that can generate exception
    }
    catch (Exception ex)
    {

    }
}

is the same as

public void SomeMethod()
{
    //some logic that NEVER generates the exception
}

In scope of quartz.net:

The only type of exception that you are allowed to throw from the execute method is JobExecutionException.

otherwise you will have unhandled exception in AppDomain. You can find more in Quartz.net Job unhandled exception behaviour SO question