web-dev-qa-db-fra.com

Hangfire DisableConcurrentExecution: que se passe-t-il lorsque le délai expire?

Selon le Hangfire 0.8.2 annonce post , Hangfire a un filtre DisableConcurrentExecution qui, lorsqu'il est appliqué à une méthode, empêche l'exécution simultanée de plusieurs instances de la méthode.

Le filtre DisableConcurrentExecution prend un paramètre timeoutInSeconds int. Dans l'exemple de l'article lié:

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

Ma question est la suivante: que se passe-t-il lorsque, compte tenu d'un travail en attente d'obtention du verrou pour une méthode filtrée DisableConcurrentExecution, le temps d'attente du travail dépasse la valeur timeoutInSeconds?

16
Jon Schneider

Je l'ai testé récemment. Cette instance de travail a été enregistrée comme ayant échoué dans le tableau de bord et répertorié l'exception qui indiquait que le délai avait expiré en attendant un verrou exclusif.

Vous verrez l'exception suivante:

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)
25
Nat Wallbank