假设我想大致N次启动每秒平均分配任务。使用await Task.Delay中的杀死性能
所以,我想这一点:
public async Task Generate(int numberOfCallsPerSecond)
{
var delay = TimeSpan.FromMiliseconds(1000/numberOfCallsPerSecond); // a call should happen every 1000/numberOfCallsPerSecond miliseconds
for (int i=0; i < numberOfcallsPerSecond; i++)
{
Task t = Call(); // don't wait for result here
await Task.Delay(delay);
}
}
起初我预计这1秒钟内运行,但对于numberOfCallsPerSecond = 100
它在我的12核CPU需要16 seconds
。 似乎是等待Task.Delay增加了很多的开销(当然没有它的地方生成的通话发生在3ms。
我没想到在这种情况下,等待会增加很多开销。 ?正常
编辑:
请忘了()的调用运行该代码显示similiar结果:
public async Task Generate(int numberOfCallsPerSecond)
{
var delay = TimeSpan.FromMiliseconds(1000/numberOfCallsPerSecond); // a call should happen every 1000/numberOfCallsPerSecond miliseconds
for (int i=0; i < numberOfcallsPerSecond; i++)
{
await Task.Delay(delay);
}
}
我试图用numberOfCallsPerSecond = 500
运行它,它需要大约10秒,我的预期Generate
取大约1秒,而不是10倍以上
你可以给Call方法一些代码吗?你确定这个方法在返回任务对象之前不需要时间吗? – Fabske 2014-11-03 14:28:14
您在10秒钟内的500个电话的新结果与调度程序量相当一致。 – 2014-11-03 14:41:47
嗨,大家好,请忘记Call()方法,查看我的EDIT – 2014-11-03 14:42:10