等待Task.Delay()延迟预期的更长时间

时间:2017-11-24 15:20:05

标签: c# .net task-parallel-library

我有一个Windows服务应用程序,它大量使用.Net任务。我对他们有一个很好的理解,但我不是亲,我遇到了问题。

我的情况是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"

什么会导致这类事情?

0 个答案:

没有答案