ThreadPool.QueueUserWorkItem にてつらつらと数十個(不定)のスレッドを起動し
全てのスレッドが終わるまでメインスレッドを待たせたいのですが、どんな方法が
最もスマートでしょうか?

スレッドを起動するたびに待機用変数をインクリメントして、それぞれのスレッドの
終了時に待機用変数をデクリメントして、メンスレッドでは無限ループで待機用変数が
0になるのを待つ。
と言う方法が思いついたのですが、わざわざスレッドを使う割にはCPUリソースが非常に
もったいない気がします。