This is best illustrated with an example.
Say I want to load several records from a database at the beginning of a web request. I want to pull in all the necessary data asynchronously. I might have something like this:
var user = await Database.GetUser(userId);
var group = await Database.GetGroup(groupId);
var members = await Database.GetGroupMembers(groupId);
Now let’s say I want to load this data in parallel. Suddenly this nice clear/clean async code becomes a bit messy.
var userTask = Database.GetUser(userId);
var groupTask = Database.GetGroup(groupId);
var membersTask = Database.GetGroupMembers(groupId);
await Task.WhenAll(userTask, groupTask, membersTask);
var user = userTask.Result;
var group = groupTask.Result;
var members = membersTask.Result;
Is there a nicer, more succinct way to achieve this?