Технически, этот код будет работать, но точное число потоков, работающих «одновременно», будет варьироваться.
В дополнение к параллельным расширениям .NET 4 также добавил «восхождение на холм» и внедрение потоков впул потоков, поэтому в основном пул потоков .NET попытается добавить потоки в цикл Parallel.ForEach, чтобы увидеть, завершится ли больше потоков, поскольку ваши никогда не завершат, число потоков будет различным, но я предполагаю, что это будет не идеально.
Вы можете попытаться использовать конструкцию ParallelWhile, команда опубликовала в блоге несколько способов сделать это, вот один .