당신은 정밀 걱정하는 경우에, 당신은 Int16.MaxValue
덩어리로 delay
을 deviding보다는 Stopwatch
를 사용한다. 이것은 아래의 코드가 다른 답변 다른 방법은 다음과 같습니다
private static async Task LongDelay(TimeSpan delay)
{
var st = new System.Diagnostics.Stopwatch();
st.Start();
while (true)
{
var remaining = (delay - st.Elapsed).TotalMilliseconds;
if (remaining <= 0)
break;
if (remaining > Int16.MaxValue)
remaining = Int16.MaxValue;
await Task.Delay(TimeSpan.FromMilliseconds(remaining));
}
}
UPDATE : @ CoryNelson의 의견에 따르면, Stopwatch
긴 랩 충분하지 않습니다. 그렇다면, 단순히 DateTime.UtcNow
를 사용하는 것이 가능하다 :
private static async Task LongDelay(TimeSpan delay)
{
var start = DateTime.UtcNow;
while (true)
{
var remaining = (delay - (DateTime.UtcNow - start)).TotalMilliseconds;
if (remaining <= 0)
break;
if (remaining > Int16.MaxValue)
remaining = Int16.MaxValue;
await Task.Delay(TimeSpan.FromMilliseconds(remaining));
}
}
출처
2015-01-18 02:03:44
avo
난 당신을 위해 ... (확인 계산기) ... 24.86 일 무언가를 지연 싶어하는 상황을 추측 할 수 없습니다. –
기다리는 데는 25 일이 걸립니다. 영원히 기다리고 싶다면'Task.Delay (-1) '를 사용할 수 있습니다. – i3arnon
@ DanielMann 주어진 기간 후에 엔트리를 제거하는 캐시를 쓰고 있습니다. 오랫동안 캐시하려는 사람은 거의 없을 것 같지만 제한적인 요소가되기를 원하지는 않습니다. –