【发布时间】:2013-10-03 05:45:17
【问题描述】:
我想编写一些代码来检测死锁,如果发生死锁,请重试尝试的任何数据库操作,最多 n 次。我注意到人们经常在重试之间添加时间延迟。下面是一些 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关联的一些问题。还有什么是竹货机? -
en.wikipedia.org/wiki/Cargo_cult_programming Task.Delay 在使用 async/await 时更胜一筹,绝对...
标签: sql deadlock database-deadlocks