Problemas de .net Core Parallel.ForEach

Eu mudei para o .net Core para alguns projetos e agora estou tendo um problema com o Parallel.ForEach. No passado, eu costumava ter uma lista de valores de ID que eu usaria para fazer solicitações da Web para obter os dados completos. Seria algo como isto:

Parallel.ForEach(myList, l =>
{
    // make web request using l.id 
    // process the data somehow
});

Bem, no .net Core, todas as solicitações da Web devem ser marcadasawait o que significa que a ação Parallel.ForEach deve ser marcada comasync. Mas, marcar uma ação Parallel.ForEach comoasync significa que temos umvoid async método que causa problemas. No meu caso particular, isso significa que a resposta retorna ao aplicativoantes todas as solicitações da web no loop paralelo são concluídas, o que é estranho e causa erros.

Pergunta: Quais são as alternativas para usar o Parallel.ForEach aqui?

Uma solução possível que encontrei foi agrupar o loop paralelo dentro de uma tarefa e aguardar a tarefa:

await Task.Run(() => Parallel.ForEach(myList, l =>
{
    // stuff here
}));

(encontrado aqui:Parallel.ForEach vs Task.Run e Task.WhenAll)

Mas isso não está funcionando para mim. Quando uso isso, acabo retornando ao aplicativo antes da conclusão do loop.

Outra opção:

var tasks = new List<Task>();
foreach (var l in myList)
{
    tasks.Add(Task.Run(async () =>
    {
         // stuff here
    }));
}
await Task.WhenAll(tasks);

Isso parece funcionar, mas essa é a única opção? Parece que o novo .net Core tornou Parallel.ForEach praticamente inútil (pelo menos quando se trata de chamadas da Web aninhadas).

Qualquer assistência / conselho é apreciada.

questionAnswers(3)

yourAnswerToTheQuestion