Basically I need to process my list in the ORDER it came into as input but on multiple threads.
Those are mutually exclusive requirements. You can do one or the other, but never both.
If you don't care what order the items were processed in, you just want to make sure that your end result is that the objects are in the order that they first came in as you can do something like this:
var list = new List<int> { 1, 2, 3, 4, 5 };
Parallel.For(0, list.Count, i =>
{
list[i] = Process(i);
});
If you prefer PLINQ over Parallel.For
you could do something like this:
Enumerable.Range(0, list.Count)
.AsParallel()
.WithDegreeOfParallelism(10)
.ForAll(i =>
{
list[i] = Process(i);
});