我想编写一些代码来检测死锁,如果它们发生,重试无论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;
}
}
为什么这样的重试逻辑在重试之间包含这样的时间延迟?
'Task.Delay(millisecondsDelay:300).Wait()'那是竹货机,或者是有实际这样做了沉睡的线程有什么好处? – Will
@我不确定'Task.Delay'是否比'Thread.Sleep'更好。在我写这个问题的时候,我可能会认为'Task.Delay'没有一些与Thread.Sleep关联的问题。另外什么是竹货机? – Sam
https://en.wikipedia.org/wiki/Cargo_cult_programming当使用async/await时,Task.Delay更胜一筹,当然... – Will