2

デッドロックを検出するコードを書きたいと思っています。デッドロックが発生した場合は、最大n回試行された DB 操作を再試行します。再試行の間に時間遅延を追加することがよくあることに気付きました。私が何を意味するかを明確にするためのC#コードを次に示します。

void RetryIfDeadlocks(Action dbOperation, int maximumRetries)
{
    try
    {
        dbOperation();
    }
    catch (DeadlockException)
    {
        var shouldRetry = maximumRetries > 0;

        if (shouldRetry)
        {
            Task.Delay(millisecondsDelay: 300).Wait();
            RetryIfDeadlocks(dbOperation, maximumRetries - 1);
        }
        else
            throw;
    }
}

このような再試行ロジックに、再試行間の時間遅延を含める必要があるのはなぜですか?

4

2 に答える 2

2

遅延なしで、ループが停止するまで、デッドロックの再試行により、ネットワーク/ディスク/データベースがアクティビティで「バタンと閉まる」可能性があります。再試行する前に、ループに小さな遅延を配置して、他のトラフィックが最初に通過できるようにすることをお勧めします (実際には、デッドロックを解決するために必要な場合があります)。

于 2013-10-03T06:09:14.033 に答える