我想编写一些代码来检测死锁,如果发生死锁,请重试尝试最多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;
}
}
为什么这样的重试逻辑要在重试之间包含这样的时间延迟?