スレッドプールの用途には注意

Delegate.BeginInvokeに重い処理はさせるな/匣の向こう側 - あまりに.NETな より

簡易に使うために提供されているオブジェクトが、その実装も簡易だったりする例。デフォルトで1プロセスあたり25スレッドというのは注意しないとはまりそうだ。(ThreadPool. GetAvailableThreadsメソッドで取得した値までであれば、25を越えるスレッドをプールに登録することはできる)
ちなみに.NETのThreadPoolクラスはThreadクラスとは違い、個々のスレッドのインスタンスの制御は全くできない。

個人的にはJavaで慣れてしまっているせいか、明示的にマルチスレッドを意識した部分には、普通のThreadクラスを使うことが殆どだが、リンクで書かれている通り、デリゲートを使用した非同期処理では暗黙のうちに使われるので注意が必要。(と、自分に言聞かせるためにも明記)