为何C#循环await Task.Delay(1)的耗时与预期1000毫秒不符?
为什么循环await Task.Delay(1)的耗时远超过1000毫秒?
1. Task.Delay的系统定时器精度限制
Task.Delay依赖系统底层定时器实现,而Windows系统默认的定时器分辨率通常在15.6毫秒左右(这是系统时钟的基础滴答间隔)。即便你传入1毫秒作为延迟参数,实际等待时间也会向上取整到最近的系统时钟滴答,单次延迟实际会消耗15-16毫秒。1000次这样的延迟累加,总耗时自然会接近15000毫秒,远高于预期的1000毫秒。
2. await的线程调度额外开销
每次await完成后,线程调度器需要将后续执行逻辑重新放回线程池队列,这个调度过程会产生微小的额外开销。单次开销可以忽略,但1000次累加后,会进一步拉高总耗时。
优化建议
如果想要接近1000毫秒的延迟效果,直接使用单次延迟即可:
await Task.Delay(1000);
这种方式只会触发一次定时器和线程调度,实际耗时会更接近预期值。
内容的提问来源于stack exchange,提问作者Zuprik
相关产品推荐
相关产品推荐

