3

私は次のコードを持っています、これがこれを行う正しい方法であることを確認する必要があります..それは機能し、すべてが期待するほど速くはありません..私は個々の呼び出しの時間を計りました、そして最長は実行にかかる時間の近くにはありません。

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

1 に答える 1

1

getproducts割り当て可能なタイプを返すようIList<T>です。これは、から返された各アイテムgetproductsを呼び出す前に、結果セットを具体化することを意味します。DoSomethingAsyncgetproducts

各アイテムを生み出してセットを具体化するのにかかる時間にもよりますが、おそらく最も影響力があります。

とはいえ、実装getproductsを返すようにメソッドを変更する必要があります。IEnumerable<T>ただし、リターンタイプを変更するだけでなく、マテリアライゼーションを削除して(おそらくへの呼び出しToList)、yield代わりに使用する必要があります。

于 2012-10-30T13:08:02.233 に答える