.net Core Parallel.ForEach cuestiones

Me cambié a .net Core para algunos proyectos y ahora tengo un problema con Parallel.ForEach. En el pasado, a menudo tenía una Lista de valores de identificación que luego usaría para hacer solicitudes web para obtener los datos completos. Se vería algo así:

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

Bueno, en .net Core las solicitudes web deben estar etiquetadasawait lo que significa que la acción Parallel.ForEach debe etiquetarse conasync. Pero, etiquetar una acción Parallel.ForEach comoasync significa que tenemos unvoid async método que causa problemas. En mi caso particular, eso significa que la respuesta vuelve a la aplicaciónantes de todas las solicitudes web en el bucle paralelo se completan, lo cual es incómodo y causa errores.

Pregunta: ¿Cuáles son las alternativas para usar Parallel.ForEach aquí?

Una posible solución que encontré fue envolver el bucle paralelo dentro de una tarea y esperar la tarea:

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

(encontrado aquí:Paralelo.ForEach vs Task.Run y Task.WhenAll)

Pero eso no me funciona. Cuando uso eso, todavía termino volviendo a la aplicación antes de que se complete el ciclo.

Otra opción:

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

Esto parece funcionar, pero ¿es esa la única opción? Parece que el nuevo .net Core ha hecho que Parallel.ForEach sea prácticamente inútil (al menos cuando se trata de llamadas web anidadas).

Cualquier ayuda / consejo es apreciada.

Respuestas a la pregunta(3)

Su respuesta a la pregunta