我有以下代码,我只需要确保这是执行此操作的正确方法即可。它可以正常工作,但一切都没有Id期望的那么快。我已为每个呼叫计时,最长的是几乎没有时间花在运行上。
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);
最佳答案
看来getproducts
返回可分配给IList<T>
的类型。这意味着,在对从getproducts
返回的每个项目调用DoSomethingAsync
之前,getproducts
将实现结果集。
取决于产生每个项目并具体化集合所需的时间,其影响最大。
也就是说,您应该更改getproducts
方法以返回IEnumerable<T>
实现。但是,除了更改返回类型之外,您还需要做更多的事情,您需要删除实现(很可能是对ToList
的调用),而应使用yield
。
关于c# - 我应该如何使用“全部任务”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13138272/