Hangfire DisableConcurrentExecution:超时到期后会发生什么?

时间:2016-11-09 21:02:17

标签: c# hangfire

根据Hangfire 0.8.2 announcement post,Hangfire有一个DisableConcurrentExecution过滤器,当应用于某个方法时,会阻止该方法的多个实例同时执行。

DisableConcurrentExecution过滤器采用timeoutInSeconds int参数。从链接文章中的示例:

[DisableConcurrentExecution(timeoutInSeconds: 10 * 60)]
public void SomeMethod()
{
    // Operations performed inside a distributed lock
}

我的问题是:当一个等待获得DisableConcurrentExecution - 过滤方法的锁定的作业时,作业等待的时间超过timeoutInSeconds值时会发生什么? / p>

1 个答案:

答案 0 :(得分:17)

我最近测试过。该作业实例在仪表板中记录为失败,并列出了异常,表示在等待独占锁定时超时已到期。

您会看到以下异常:

Hangfire.Storage.DistributedLockTimeoutException: Timeout expired. The timeout elapsed prior to obtaining a distributed lock on the 'xxx' resource.
    at Hangfire.SqlServer.SqlServerDistributedLock.Acquire(IDbConnection connection, String resource, TimeSpan timeout)