我有以下代码:
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.ForEach
和async/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/