Strategy for avoiding threadpool starvation while performing cpu bound jobs in a queued fashion
I think a much easier solution is to just increse the number of threads available in the thread pool by calling ThreadPool.SetMaxThreads().

Also, if you have this many threads, then it means that:


either you're not going to get any performance improvements from parallelization, because all your cores are busy
or most of your threads are blocked, which means a better approach would be to actually solve the problem by using asynchronous waiting (possibly with the help of C# 5 async-await), instead of working around the problem.