【发布时间】:2014-04-19 16:14:33
【问题描述】:
我使用下面的Parallel.For 代码调用了一个异步方法。现在看一下代码,除了 JsonParse 类有一个静态方法之外,它非常简单,它所做的只是调用 Web 服务来下载 json 字符串并将其转换为 PairResults 对象并返回。
我遇到的问题是Parallel.For 循环永远不会退出,我可以清楚地看到数据来自网络调用“item.part1=data.value”,一切正常,但 updateAllResults 永远不会完成。我做错了什么?
public void updateAllResults()
{
Parallel.For(0, PairList.Count(), (i) =>
{
var item = PairList[i];
var data = (Parse.JsonParse<PairResults>
.getJsonString("http://localhost:22354/"
+ item.Original)).Result;
item.part1 = data.value;
});
}
【问题讨论】:
-
应该会完成,但可能需要很长时间,具体取决于 PairList 中的项目数。话虽如此,请考虑通过使用
async (i) =>和await而不使用.Result调用来实现真正的异步。 -
啊,这就像魔术一样。将方法更改为 async (i) => 就是答案。
标签: c# .net winforms task-parallel-library async-await