我有一个大量使用 .Net 任务的 Windows 服务应用程序。我对它们有很好的了解,但我不是专业人士,并且遇到了问题。
我有一种情况,我的await Task.Delay()
有时需要比应有的时间长得多(最多长 60 秒)。我确信这是由于我正在做的事情造成的,但我很难追踪到可能影响这一点的因素。
这是我正在做的事情类型的一个非常简化的示例。
public async Task DoDelay(CancellationToken token = default(CancellationToken))
{
// Delay for then check to see if we need to extend our visibility timeout
DateTime beforeDelay = DateTime.Now;
// Wait for 180 seconds, i.e. 3 minutes
await Task.Delay((int)180 * 1000, token).ConfigureAwait(false);
// Check to see how long we actually delayed for
TimeSpan durationOfDelay = DateTime.Now - beforeDelay;
Trace.WriteLine("Duration: " + durationOfDelay.TotalSeconds.ToString());
}
有时,durationOfDelay
最多可能比我延迟的时间长 60 秒。
作为一些背景,可能有多个其他任务调用DoDelay()
并同时运行。有时我看到所有等待的Task.Delay()
尽管在不同时间以相同的延迟值等待呼叫,但呼叫仍同时完成。
例如:
// Non-awaited call executed at 00:00
DoDelay();
// Non-awaited call executed at 00:10
DoDelay();
// Non-awaited call executed at 00:20
DoDelay();
// Time goes by....
// Trace output:
// "Duration: 200"
// "Duration: 190"
// "Duration: 180"
什么会导致这种事情呢?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)