Hangfire DisableConcurrentExecution: что произойдет, когда истечет время ожидания?

Согласно объявлению Hangfire 0.8.2, Hangfire имеет фильтр DisableConcurrentExecution, который при применении к методу предотвращает одновременное выполнение нескольких экземпляров метода.

Фильтр DisableConcurrentExecution принимает параметр timeoutInSeconds int. Из примера в связанной статье:

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

Мой вопрос: что происходит, когда для задания, ожидающего получения блокировки для DisableConcurrentExecution-фильтрованного метода, время ожидания задания превышает значение timeoutInSeconds?


person Jon Schneider    schedule 09.11.2016    source источник
comment
Примечание. Если у вас есть ожидающие задачи, они заблокируют рабочие потоки, ожидающие снятия блокировки. Так что будьте осторожны, если вы намеренно или случайно полагаетесь на этот атрибут для последовательного запуска элементов, потому что вы также можете помешать запуску ДРУГИХ задач.   -  person Simon_Weaver    schedule 18.01.2021


Ответы (1)


Я тестировал это недавно. Этот экземпляр задания был зарегистрирован как сбой на панели мониторинга и содержал список исключений, указывающих на то, что время ожидания истекло во время ожидания монопольной блокировки.

Вы увидите следующее исключение:

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)
person Nat Wallbank    schedule 09.11.2016
comment
Вот, пожалуйста, более подробная информация об исключении (извините за отсутствие форматирования): Hangfire.Storage.DistributedLockTimeoutException: истекло время ожидания. Время ожидания истекло до получения распределенной блокировки ресурса «xxx». at Hangfire.SqlServer.SqlServerDistributedLock.Acquire (соединение IDbConnection, строковый ресурс, тайм-аут TimeSpan) - person Nat Wallbank; 10.11.2016
comment
У меня очень похожая проблема, это обычная проблема с повторяющимися заданиями, это так грустно... - person Richard Lee; 06.09.2017