假設我想大致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