I am looking to optimize a function which makes a bunch of HTTP IO calls to other APIs and does something with the response. These API calls are not dependent on each other, so is there a way to execute them in parallel and get some performance gains instead of awaiting each of these calls one by one immediately?
This function is part of an ASP.NET Core Web API and is invoked for certain incoming API requests.
Option 1 - Make all calls individually and await them immediately
var res1 = await AsyncIOCall1();
var res2 = await AsyncIOCall2();
var res3 = await AsyncIOCall2();
<Do something with response>
Option 2 - Make all calls but await them later
var resTask1 = AsyncIOCall1();
var resTask2 = AsyncIOCall2();
var resTask3 = AsyncIOCall2();
//Now await
var res1 = await resTask1;
var res2 = await resTask2;
var res3 = await restTask3;
<Do something with response>
Option 3 - Use Task.Run
var resTask1 = Task.Run(async () => await AsyncIOCall1());
var resTask2 = Task.Run(async () => await AsyncIOCall2());
var resTask3 = Task.Run(async () => await AsyncIOCall3());
//Now await
var res1 = await resTask1;
var res2 = await resTask2;
var res3 = await restTask3;
<Do something with response>
What is really going to be the difference between these options and is there a preferred option?