Это определенно не самый эффективный способ.
Каждый await
заставляет l oop делать паузу до завершения Task
.
Вы хотите разрешить все задачи для одновременного запуска:
public async Task<IList<ContactAndAccounts>> GetAll()
{
var accounts = await _dbContext.Account.Where(x => x.Name == "Amazing").ToListAsync();
await Task.WhenAll(accounts.Select(async account =>
{
accounts.Contact = await GetContact(account.Id);
}));
return accounts;
}
Select
даст Task
для каждого элемента, который можно ожидать через Task.WhenAll
.