【发布时间】:2014-06-29 21:08:19
【问题描述】:
我有以下代码:
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 次。为什么?
【问题讨论】:
-
您确定没有引发异常吗?您是否在
ForEach函数的开头设置了断点并验证它已运行 3 次?xRoot.Elements("key")的确切类型是什么? -
使用
await,而不是.Result。 (和Task.WhenAll(elements.Select()),而不是Parallel.ForEach()) -
为了确保它只执行两次,将此声明放在循环之前
int loopCounter = 0;并在循环内添加Interlocked.Increment(ref loopCounter);。处理完成后检查该值以查看它执行了多少次。
标签: c# .net async-await windows-8.1 parallel.foreach