我不明白爲什麼這個測試顯示lambda運行一次。我只能看到它可能產生0或10000.但只有一次?理想情況下,我想要執行所有任務,就像Task.WhenAll所建議的工具提示文檔一樣。任務不能在enumerable.repeat中運行
[Fact]
public async Task FireLotsOfQueries()
{
var counter = 0;
var taskList = Enumerable.Repeat(Task.Run(async() =>
{
++counter;
await Task.Delay(1000);
}), 10000);
await Task.WhenAll(taskList);
Assert.Equal(10000, counter);
}
結果:
Xunit.Sdk.EqualException:Assert.Equal()失敗預期:10000 實際:1
'++ counter'是不是線程安全的,你需要使用'Interlocked.Increment(ref counter);'如果你想從多個線程更新一個int。 –
@ScottChamberlain幸運的是,代碼不能從多個線程訪問它。如果代碼更改爲同時從多個線程訪問「counter」,那麼是的,這就成了一個問題。 – Servy