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?