web-dev-qa-db-ja.com

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- filteredメソッドのロックの取得を待機しているジョブが与えられた場合、ジョブが待機している時間がtimeoutInSeconds値を超えるとどうなりますか?

16
Jon Schneider

私は最近それをテストしました。そのジョブインスタンスは、ダッシュボードで失敗として記録され、排他ロックを待機している間にタイムアウトになったことを示す例外が一覧表示されました。

次の例外が表示されます。

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