After browsing different await vs Task.Run questions on SO my takeaway is that await is better for I/O operations and Task.Run for CPU-intensive operations. However the code with await seems to always be longer than Task.Run. Below is an example method of how I am creating a context object with await in my app:
public async AppContext CreateAppContext()
{
    var context = new AppContext();
    var customersTask = _dataAccess.GetCustomers();
    var usersTask = _dataAccess.GetUsers();
    var reportsTask = _dataAccess.GetReports();
    context.Customers = await customersTask;
    context.Users = await usersTask;
    context.Reports = await reportsTask;
    return context;     
}
If I was to rewrite this with Task.Run I could do
public async AppContext CreateAppContext()
{
    var context = new AppContext();
    await Task.WhenAll(new[]
    {
        Task.Run(async () => { context.Customers  = await _dataAccess.GetCustomers(); }),
        Task.Run(async () => { context.Users = await _dataAccess.GetUsers(); }),
        Task.Run(async () => { context.Reports = await _dataAccess.GetReports(); });
    })
            
    return context; 
}
The difference is not major when I create an object with 3 properties but I have objects where I need to initialize 20+ properties in this manner which makes the await code a lot longer (nearly double) than Task.Run. Is there a way for me to initialize the object using await with code that is not a lot longer than what I can do with Task.Run?
 
     
     
    