Parallel.Foreach()与await / async

时间:2017-05-23 15:06:37

标签: c# .net asynchronous parallel-processing async-await

我知道还有一些其他问题涉及到这个主题,但我想弄清楚我是否走在正确的轨道上以及我是否遗漏了某些东西。

基本上,我有一个调用async方法的循环,该方法进行HTTP调用并解析JSON回复。我试图找到调用该方法的最佳方法。目前我这样做:

方法签名:async Task<List<Item>> GetItemData(string item);

foreach(var item in itemList)
{
    var test = await GetItemData(item);
}

它工作正常,但速度很慢(itemList可能包含300-500个项目,大约需要150000毫秒)。我想我可能会尝试添加Parallel.Foreach并按照这样做:

Parallel.ForEach(itemList, (item) =>
{
    var test = GetItemData(item).Result;
});

如果我在lambda中添加了async关键字,并省略了.Result,则会导致问题。所以,我的问题是,有什么理由我可能不想第二种方式吗?调用.Result似乎反对尝试以async方式执行某些操作,但第二种方法的工作速度几乎快两倍。

提前致谢!

0 个答案:

没有答案