c# - Parallel.ForEach 的奇怪行为

标签 c# .net async-await windows-8.1 parallel.foreach

我有以下代码:

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/awaitisn'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/

相关文章:

c# - 在内存中编辑 ZipArchive .NET

c#/.net项目如何保存/组织数据库查询

.net - 返回值数组时的最佳实践 (.NET)

c# - C# 中的递归正则表达式

JavaScript 在类中使用 async/await

javascript - 在Promise.all()中编写多个map函数

c# - 从 XML 创建实体

c# - LINQ to Dataset 是 LINQ to EF 的子集还是这两者是独立的?

c# - 我可以在后台运行多个慢速进程,以便可以并行运行多个任务吗?

c# - 在 C# 中格式化打印文档