в своей программе в аналогичном коде (считывание с диска, подсчет кэшей блоков считанного) пользовался обычным parallel foreach, под капотом там если мне не изменяет как раз threadpool, ибо это эффективней чем постоянно создавать потоки вручную. В таком раскладе как у меня тормозит именно диск, скорость работы кода ограничивается скоростью работы диска, в моем случае под 100мб в сек. шло легко.