fatalなmistake
C#でスレッドの制御がどうもうまく動かないと思っていたら,どうやら致命的な勘違いをしていたようだ.
Thread.joinは「コールした先のスレッドが終了するまで現状のスレッドを待機する」メソッドのはずなのだが,「どれか一つのスレッドが終了するまでコールしたスレッドを待機する」と誤解した.ちなみに,誤解の元となったMicrosoftのドキュメントの解説文がこれ,
1 つのスレッドが終了するまで呼び出し元のスレッドをブロックします。
一応,呼び出し元ってきちんと書いてあるところを見逃したのが原因なのだが,なんとも解釈のし辛い文章だ.ちなみに,英文だとこう.
Blocks the calling thread until a thread terminates
確かに直訳だとそうなのだろうが,この場合のa threadを1つのスレッドと訳すのは勘弁してくれ*1.