How to use parallel linq when two enumerables need to be combined
===

I have two enumerables that I would like to use with PLINQ, how do I combine them correctly? Here they are:

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

In a nutshell, I want to apply some complex time consuming formatting in parallel and map the line numbers to the messages. Here is what I mean (without the line numbers), since I do not know how to integrate them into this expression:

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

I will then use the results of the formatting with a simple foreach:

    foreach (var line in formattedLine)
      ...

Well the above is good for the messages, but I want to include some formatted lineNums in there from the enumerable in a one-to-one correspondance with the messages. I can't just interlocked increment an integer in the lambda, because I will not get ordered results. So, basically I need a one-to-one mapping of the two enumerables as my params to the lambda, I suppose.

How do I do this?





