Во-первых, я рекомендую принудительно перечислить задачи (например, дополнительный вызов ToList()
), прежде чем отправлять их куда-либо. Вы не хотели бы случайно перечислять список более одного раза.
var tasks = orderIds.Select( orderId => GetOrderDetails(orderId) ).ToList();
Тогда ждите задания:
await Task.WhenAll( tasks );
И вуаля, ваши заказы готовы.
var orders = tasks.Select( t => t.Result ).Where( o => o != null ).ToList();
Кстати, ничего не мутирует, поэтому вы полностью поточнобезопасны без необходимости блокировок (при условии, что GetOrderDetails
поточнобезопасен). Это одно из преимуществ функционального подхода к использованию linq и вообще.