Task.Delay的准确性

xco*_*r37 7 task-parallel-library windows-runtime win-universal-app

我正在使用C#/ Xaml开发Windows 10 Universal App,我正在使用等待Task.Delay(delayInMilliseconds)来暂停给定时间的方法.我的场景有点实时,因此它对时间变化非常敏感,我需要确保当我暂停一个方法让我们说8毫秒时,它会暂停8毫秒.我注意到**Task.Delay**暂停方法的实际时间跨度与传递的延迟参数不同,1到30毫秒,每次调用的"偏差"长度不同.所以,当我想睡8毫秒时,我的系统会睡眠9到39毫秒,这完全破坏了我的情景.所以,我的问题是什么是替换**Task.Delay**并获得良好精度的最佳方法?目前我使用这种方法:

 public static void Delay1(int delay)
    {
        long mt = delay * TimeSpan.TicksPerMillisecond;
        Stopwatch s = Stopwatch.StarNew();
        while (true)
        {
            if (s.Elapsed.TotalMilliseconds > delay)
            {
                return;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但它猜测它消耗了大量资源,即处理器核心的100%.如果用户具有少量处理器核心,则这将是非常不足的.

w.b*_*w.b 5

根据msdn,由于系统时钟分辨率,不可能实现更高的准确度:

此方法取决于系统时钟.这意味着如果millisecondsDelay参数小于系统时钟的分辨率(在Windows系统上大约为15毫秒),则时间延迟将近似等于系统时钟的分辨率.