I have a collection of 1000 input message to process. I'm looping the input collection and starting the new task for each message to get processed.

```
//Assume this messages collection contains 1000 items
var messages = new List<string>();

foreach (var msg in messages)
{
   Task.Factory.StartNew(() =>
   {
    Process(msg);
   });
 }

```

Can we guess how many maximum messages simultaneously get processed at the time (assuming normal Quad core processor), or can we limit the maximum number of messages to be processed at the time? 

How to ensure this message get processed in the same sequence/order of the Collection?