Hangfire 0.8.2アナウンス投稿 に従い、HangfireにはDisableConcurrentExecution
フィルターがあり、メソッドに適用すると、メソッドの複数のインスタンスが同時に実行されるのを防ぎます。
DisableConcurrentExecution
フィルターはtimeoutInSeconds
intパラメーターを取ります。リンクされた記事の例から:
[DisableConcurrentExecution(timeoutInSeconds: 10 * 60)]
public void SomeMethod()
{
// Operations performed inside a distributed lock
}
私の質問は:DisableConcurrentExecution
- filteredメソッドのロックの取得を待機しているジョブが与えられた場合、ジョブが待機している時間がtimeoutInSeconds
値を超えるとどうなりますか?
私は最近それをテストしました。そのジョブインスタンスは、ダッシュボードで失敗として記録され、排他ロックを待機している間にタイムアウトになったことを示す例外が一覧表示されました。
次の例外が表示されます。
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)