What is the most elegant way to load multiple variables asynchronously in parallel in c#

Viewed 377

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?

2 Answers
Related