Как использовать параллельный linq, когда необходимо объединить два перечисления

У меня есть два перечисления, которые я хотел бы использовать с PLINQ, как мне правильно их объединить? Они здесь:

List<Message> messageList=...;

IEnumerable<int> lineNums=Enumerable.Range(1,messages.Count);
IEnumerable<Message> messages=messageList;

Короче говоря, я хочу параллельно применить сложное форматирование, занимающее много времени, и сопоставить номера строк с сообщениями. Вот что я имею в виду (без номеров строк), так как не знаю, как их интегрировать в это выражение:

var formattedLine=messageList.AsParallel().AsOrdered().Select(message =>
  {
    ... // Some work here to be done in parallel
    return string.Format(...); // Some formatting here of message
  }

Затем я буду использовать результаты форматирования с помощью простого foreach:

foreach (var line in formattedLine)
  ...

Хорошо, что вышеприведенное хорошо для сообщений, но я хочу включить туда некоторые отформатированные lineNums из перечислимого в однозначном соответствии с сообщениями. Я не могу просто увеличить целое число в лямбде, потому что я не получу упорядоченные результаты. Итак, в основном мне нужно взаимно однозначное сопоставление двух перечислимых в качестве моих параметров с лямбдой, я полагаю.

Как мне это сделать?


person Michael Goldshteyn    schedule 19.07.2012    source источник


Ответы (1)


Используйте перегрузку select, которая принимает элемент и его индекс, например :

var formattedLine=messageList.AsParallel().AsOrdered().Select((message, index) =>
{
    ... // Some work here to be done in parallel
    return string.Format(...); // Some formatting here of message using index
});
person Kris Vandermotten    schedule 19.07.2012