{ int id = int.Parse(xKey.Attribute("id"-6ren">
gpt4 book ai didi

c# - Parallel.ForEach 的奇怪行为

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

我有以下代码:

Parallel.ForEach(xRoot.Elements("key"), xKey =>
{
int id = int.Parse(xKey.Attribute("id").Value);
string code = xKey.Attribute("code").Value;

AccountStatus accountStatus = SomeClient.GetAccountStatusAsync(id, code).Result;
);

xRoot.Elements("key") 的计数是 3,但是 ForEach 只迭代了 2 次。为什么?

最佳答案

混合 Parallel.ForEachasync/await isn't a good idea .您不需要异步方法并行执行,您需要它们同时执行。您当前的代码使用线程池线程来阻止 I/O 操作,缺少异步 api 的优势。

试试这个:

var codeIds = xRoot.Elements("key").Select(xKey => new { Id = int.Parse(xKey.Attribute("id").Value, Code = xKey.Attribute("code").Value  });

var codeTasks = codeIds.Select(x => SomeClient.GetAccountStatusAsync(x.Id, x.Code));

await Task.WhenAll(codeTasks);

关于c# - Parallel.ForEach 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24480289/

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