互いに依存しない非同期RESTサービスはほとんどありません。それは、Service1からの応答を「待っている」間で、Service2、Service3などを呼び出すことができます。
たとえば、以下のコードを参照してください。
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
現在、にservice2Response
依存せず、service1Response
独立して取得できます。したがって、最初のサービスの応答を待って2番目のサービスを呼び出す必要はありません。
Parallel.ForEach
CPUバウンド操作ではないため、ここで使用できるとは思わない。
これらの2つの操作を並行して呼び出すために、useを呼び出すことができますTask.WhenAll
か?私が使用してTask.WhenAll
いる問題の1つは、結果を返さないことです。結果を取得するには、を呼び出したtask.Result
後に呼び出すことができます。Task.WhenAll
すべてのタスクが既に完了しており、応答を取得する必要があるためです。
サンプルコード:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
このコードは、パフォーマンスの面で最初のコードよりも優れていますか?私が使用できる他のアプローチはありますか?
Parallel.ForEach
はasync await
、単一スレッドですべてを行うのに対して、新しいスレッドを生成することだと推測しています。
await
)を使用する前に、準備ができる前に論理的にブロックするだけです。
WhenAll
前に、私がやっていResult
ます。Task.Resultは呼び出し元のスレッドをブロックするため、タスクが実際に完了した後に呼び出した場合、すぐに結果が返されると想定しています。理解を検証したい。
I do not think I can use Parallel.ForEach here since it is not CPU bound operation
-私はそこに論理を見ません。並行性は並行性です。