我已经得到了以下代码,我只需要确保这是正确的方法来做到这一点..它的工作原理,但并不像我期望的那么快..我已经计时了每个人的电话和最长的是没有接近运行所需的时间。
public async Task<Result[]> DoSomethingGoodAsync()
{
List<Product> productList = getproducts();
IEnumerable<Task<Result>> list =
from p in productList select DoSomethingAsync(p);
Task<Result>[] slist = list.ToArray();
return await Task.WhenAll(slist);
}
现在我的问题了,这是对的吗?有没有更好,更有效的方法来做到这一点? DoSomethingAsync是一种可以调用另一种异步方法的等待方法。
编辑:我的问题..这是构建我想要一起执行的等待方法集合的正确方法吗?
DoSomethingAysnc()内部
scrapeResult = await UrlScraper.ScrapeAsync(product.ProductUrl);
model = this.ProcessCheckStock(model, scrapeResult, product);
答案 0 :(得分:1)
getproducts
似乎返回了可分配给IList<T>
的类型。这意味着getproducts
会在从DoSomethingAsync
返回的每个项目上调用getproducts
之前实现结果集。
根据产生每件物品需要多长时间并实现该套装,可能会产生最大的影响。
也就是说,您应该更改getproducts
方法以返回IEnumerable<T>
实施。但您需要做的不仅仅是更改返回类型,还需要删除实现(更可能是调用ToList
)并改为使用yield
。