我不明白为什么这个测试表明lambda运行了一次。我只能看到它如何产生0或10000.但只有一次?理想情况下,我喜欢所有要执行的任务,就像Task.WhenAll建议的工具提示文档一样。
[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
答案 0 :(得分:7)
问题是你没有创建1000个任务。您正在创建一个包含相同任务1000次的枚举。试试这个:
public async Task FireLotsOfQueries()
{
var counter = 0;
var taskList = Enumerable.Range(0, 10000)
.Select(_=> Task.Run(async () =>
{
++counter;
await Task.Delay(1000);
}));
await Task.WhenAll(taskList);
Assert.Equal(10000, counter);
}
你肯定需要一些锁定计数器,因为这个版本也失败了,但是计数器将是一个接近10000的值。