相关疑难解决方法(0)

Thread.Sleep(TimeSpan)的准确度如何?

我遇到了间歇性失败的单元测试,因为经过的时间不是我预期的.

此测试的示例如下:

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();

TimeSpan oneSecond = new TimeSpan(0, 0, 1);

for(int i=0; i<3; i++)
{
    Thread.Sleep(oneSecond);
}

stopwatch.Stop();

Assert.GreaterOrEqual(stopwatch.ElapsedMilliseconds, 2999);
Run Code Online (Sandbox Code Playgroud)

这种情况大部分时间都过去了,但至少有一次失败,因为:

预期:大于或等于2999但是:2998

我不明白它怎么可能不到3秒钟.我不知道Thread.Sleep或者Stopwatch是否存在准确性问题?

正如以下一些问题的更新.正在进行单元测试的场景是一个类,它允许一个方法调用一个方法来执行某些操作,如果它失败则等待一秒并调用该方法.上面显示的测试只是对正在发生的事情的近似.

假设我想调用方法DoSomething()...但是如果DoSomething()抛出异常,我希望能够重试最多调用它3次,但每次尝试之间等待1秒.在这种情况下,单元测试的目的是验证当我们请求3次重试,每次重试之间等待1秒钟时,所花费的总时间大于3秒.

c# multithreading sleep stopwatch

16
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×1

multithreading ×1

sleep ×1

stopwatch ×1