我想編寫一些代碼來檢測死鎖,如果它們發生,重試無論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