(对我来说)意外的输出。
代码是:
public static async Task Main()
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for (int i=0; i<1000; i++)
await Task.Delay(1);
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);
}
我最好的理解是输出应该接近1000。实际情况不同。有人能解释一下为什么吗?
谢谢
如果您问为什么
Console.WriteLine(stopwatch.ElapsedMilliseconds)
不接近 1000,简短的回答是创建异步操作会产生开销。
在我的计算机上,运行您的代码会给出:
1160
我想你的意思不是
close to 1000
。
但是如果你这样做而不是循环:
await Task.Delay(1000);
在我的电脑上输出:
1003
有关异步操作性能的详细信息,有一篇很好的文章对此进行了解释: https://softwareengineering.stackexchange.com/questions/423005/measuring-async-await-overhead
假设 < 0.1ms overhead still true today. For easier calculation let's take 0.1ms to create an async task = 1000*0.1ms = 100ms. Which is close to my result of
1160
与您的代码。
可以在此处
找到有关异步性能的更深入的文章