gpt4 book ai didi

c# - 为什么我收到这段代码的 ArgumentException?

转载 作者:行者123 更新时间:2023-11-30 19:59:05 24 4
gpt4 key购买 nike

任何人都可以向我解释为什么我从这段代码中收到 ArgumentException 吗?它告诉我 Task.WhenAll 函数中的 tasks 参数包含空值。但是,它只是在我运行它时偶尔发生一次。

static async Task TestRequestSpeed()
{
var requestTasks = new List<Task>();

await Task.Run(() =>
{
Parallel.For(0, 50, (i) =>
{
requestTasks.Add(HttpSocket.Instance.GetAsync("http://google.com"));
});
});

await Task.WhenAll(requestTasks).ConfigureAwait(false);
}

我不明白其中一个请求最终会返回一个空任务。如果有人可以指导我解决潜在的问题,我将不胜感激!

更新:

我应该澄清一下,我的意图是并行发出多个请求以加快执行速度。我正在处理一个个人项目,该项目需要在单个方法调用中发出多达 200 个请求,我希望减少发出这些请求所需的时间。使用正常的异步等待程序执行此操作目前大约需要 45 秒,因此我希望并行发出请求以尽可能减少该时间。如果有更好的方法,请告诉我。

最佳答案

绝对没有充分的理由使用多线程来初始化任务列表。开销大于 yield 。您可以改用 Enumerable.Select:

static async Task TestRequestSpeedAsync()
{
var requestTasks = Enumerable.Range(0, 50).Select(HttpSocket.Instance.GetAsync("http://www.google.com"));

await Task.WhenAll(requestTasks).ConfigureAwait(false);
}

请注意,我添加了 Async 后缀以遵循 TAP 指南。

关于c# - 为什么我收到这段代码的 ArgumentException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25050982/

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