gpt4 book ai didi

c# - 任务未在 enumerable.repeat 中运行

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:49 26 4
gpt4 key购买 nike

我不明白为什么这个测试显示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() Failure Expected: 10000 Actual: 1

最佳答案

问题是您没有创建 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。

关于c# - 任务未在 enumerable.repeat 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45871031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com