I have few async REST services which are not dependent on each other. That is while "awaiting" a response from Service1, I can call Service2, Service3 and so on. 

For example, refer below code: 

```
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();

// Use service1Response and service2Response

```

Now, `service2Response` is not dependent on `service1Response` and they can be fetched independently. Hence, there is no need for me to await response of first service to call the second service.

I do not think I can use `Parallel.ForEach` here since it is not CPU bound operation. 

In order to call these two operations in parallel, can I call use `Task.WhenAll`? One issue I see using `Task.WhenAll` is that it does not return results. To fetch the result can I call `task.Result` after calling `Task.WhenAll`, since all tasks are already completed and all I need to fetch us response?

Sample Code:

```
var task1 = HttpService1Async();
var task2 = HttpService2Async();

await Task.WhenAll(task1, task2)

var result1 = task1.Result;
var result2 = task2.Result;

// Use result1 and result2

```

Is this code better than the first one in terms of performance? Any other approach I can use?