我知道还有一些其他问题涉及到这个主题,但我想弄清楚我是否走在正确的轨道上以及我是否遗漏了某些东西。
基本上,我有一个调用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
方式执行某些操作,但第二种方法的工作速度几乎快两倍。
提前致谢!