我有以下代码,我只需要确保这是执行此操作的正确方法即可。它可以正常工作,但一切都没有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/

10-08 21:49