Проблемы .net Core Parallel.ForEach

Я переключился на .net Core для некоторых проектов и теперь у меня проблема с Parallel.ForEach. В прошлом у меня часто был список значений идентификаторов, которые я затем использовал бы для создания веб-запросов, чтобы получить полные данные. Это будет выглядеть примерно так:

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

Ну, в .net Core все веб-запросы должны быть помеченыawait это означает, что действие Parallel.ForEach должно быть помечено какasync, Но, помечая действие Parallel.ForEach какasync означает, что у нас естьvoid async метод, который вызывает проблемы. В моем конкретном случае это означает, что ответ возвращается в приложениедо все веб-запросы в цикле Parallel завершены, что одновременно неудобно и вызывает ошибки.

Вопрос: Какие есть альтернативы использованию Parallel.ForEach здесь?

Одно из возможных решений, которое я нашел, заключалось в том, чтобы обернуть параллельный цикл внутри задачи и дождаться ее:

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

(найдено здесь:Parallel.ForEach vs Task.Run и Task.WhenAll)

Но это не работает для меня. Когда я использую это, я все равно возвращаюсь к приложению до завершения цикла.

Другой вариант:

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

Похоже, это работает, но это единственный вариант? Кажется, что новое ядро ​​.net сделало Parallel.ForEach практически бесполезным (по крайней мере, когда речь идет о вложенных веб-вызовах).

Любая помощь / совет приветствуется.

Ответы на вопрос(3)

Ваш ответ на вопрос