我该怎么办?

时间:2012-10-30 11:44:24

标签: c# task-parallel-library async-await

我已经得到了以下代码,我只需要确保这是正确的方法来做到这一点..它的工作原理,但并不像我期望的那么快..我已经计时了每个人的电话和最长的是没有接近运行所需的时间。

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);

1 个答案:

答案 0 :(得分:1)

getproducts似乎返回了可分配给IList<T>的类型。这意味着getproducts会在从DoSomethingAsync返回的每个项目上调用getproducts之前实现结果集。

根据产生每件物品需要多长时间并实现该套装,可能会产生最大的影响。

也就是说,您应该更改getproducts方法以返回IEnumerable<T>实施。但您需要做的不仅仅是更改返回类型,还需要删除实现(更可能是调用ToList)并改为使用yield