Hangfire DisableConcurrentExecution:当超时过期时会发生什么

本文关键字:什么 过期 DisableConcurrentExecution 超时 Hangfire | 更新日期: 2023-09-27 18:17:15

根据Hangfire 0.8.2公告,Hangfire有一个DisableConcurrentExecution过滤器,当应用于一个方法时,可以防止该方法的多个实例并发执行。

DisableConcurrentExecution过滤器接受一个timeoutInSeconds int参数。从链接文章中的示例:

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

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

Hangfire DisableConcurrentExecution:当超时过期时会发生什么

我最近测试了一下。该作业实例在指示板中记录为失败,并列出异常,该异常表明在等待排他锁时超时已过期。

你会看到以下异常:

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)