교착 상태를 감지하기위한 코드를 작성하고 싶다면 시도한 DB 작업을 n 번 시도하고 다시 시도하십시오. 나는 종종 사람들이 재 시도 사이에 시간 지연을 추가한다는 것을 알았다.교착 상태가 발생하면 다시 시도하기 전에 응용 프로그램 코드가 대기해야하는 이유는 무엇입니까?
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;
}
}
왜 그런 재시도 논리가 재시도 사이의 이러한 시간 지연을 포함해야한다 : 여기에 내가 무엇을 의미하는지 명확하게 몇 가지 C# 코드입니다?
'Task.Delay (millisecondsDelay : 300) .Wait()'대나무화물 비행기입니까, 아니면 실을 잠자는 데 실제로 이점이 있습니까? – Will
@Will,'Task.Delay'가'Thread.Sleep'보다 나은지 확실하지 않습니다. 이 질문을 적었을 때, 나는'Task.Delay'는 사람들이'Thread.Sleep'과 연관시키는 문제를 가지고 있지 않다고 생각했을 것입니다. 대나무 화물기 란 무엇입니까? – Sam
https://en.wikipedia.org/wiki/Cargo_cult_programming Task.Delay는 async/await를 사용할 때 우수합니다. – Will