wait Task.Delay() 延迟的时间比预期的要长

2024-01-26

我有一个大量使用 .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(使用前将#替换为@)

wait Task.Delay() 延迟的时间比预期的要长 的相关文章

随机推荐