Параллельный foreach с асинхронной лямбдой

Я хотел бы обрабатывать коллекцию параллельно, но у меня возникли проблемы с ее реализацией, и поэтому я надеюсь на некоторую помощь.

Проблема возникает, если я хочу вызвать метод, помеченный как асинхронный в C #, в пределах лямбды параллельного цикла. Например:

var bag = new ConcurrentBag<object>();
Parallel.ForEach(myCollection, async item =>
{
  // some pre stuff
  var response = await GetData(item);
  bag.Add(response);
  // some post stuff
}
var count = bag.Count;

Проблема возникает с счетчиком, равным 0, потому что все созданные потоки фактически являются фоновыми потоками иParallel.ForEach звонок не ждет завершения. Если я удалю ключевое слово async, метод будет выглядеть так:

var bag = new ConcurrentBag<object>();
Parallel.ForEach(myCollection, item =>
{
  // some pre stuff
  var responseTask = await GetData(item);
  responseTask.Wait();
  var response = responseTask.Result;
  bag.Add(response);
  // some post stuff
}
var count = bag.Count;

Он работает, но он полностью отключает умение await, и мне нужно выполнить некоторую ручную обработку исключений .. (Удалено для краткости).

Как я могу реализоватьParallel.ForEach цикл, который использует ключевое слово await в лямбду? Является ли это возможным?

Прототип метода Parallel.ForEach занимаетAction<T> в качестве параметра, но я хочу, чтобы он дождался моей асинхронной лямбды.

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

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