我不明白为什么这个测试显示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