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
?
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)