O que realmente acontece quando se usa assíncrono / espera dentro de uma instrução LINQ?

O seguinte snippet é compilado, mas eu esperaria que ele aguardasse o resultado da tarefa em vez de me fornecer umList<Task<T>>.

var foo = bars.Select(async bar => await Baz(bar)).ToList()

Como apontadoaqui, você precisa usarTask.WhenAll:

var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
await Task.WhenAll(tasks);

Masum comentário salienta que oasync eawait dentro deSelect() Não é necessário:

var tasks = foos.Select(foo => DoSomethingAsync(foo)).ToList();

Uma pergunta semelhanteaqui onde alguém tenta usar um método assíncrono dentro de umWhere().

assimasync eawait dentro de uma instrução LINQ existe uma sintaxe legal, mas ela não faz absolutamente nada ou tem um certo uso?

questionAnswers(2)

yourAnswerToTheQuestion