Parallel.ForEach will run each loop instance in its own thread, and will also allow you to set the MaxDegreeOfParallelism (# of threads) to whatever you want.
Parallel.ForEach(lines, new ParallelOptions{ MaxDegreeOfParallelism = 10 }, line =>
{
// do stuff with line
});