私は、System.Threading.ThreadがIDisposableではなくファイナライザを実装していることに気付きました。推奨される方法は、ファイナライザが実装されているときに常にIDisposableを実装することです。 Jeffrey Richter wroteは、ガイドラインが「非常に重要であり、常に例外なく従うべきである」と指摘しています。スレッドがIDisposableを実装していないのはなぜですか?
スレッドはなぜIDisposableを実装していませんか? IDisposableの実装は、Threadのファイナライズ可能なリソースの確定的なクリーンアップを可能にする重要な変更ではないようです。
関連する質問:スレッドはファイナライズ可能なので、実行中にスレッドがファイナライズされないようにするには、実行中のスレッドへの参照を保持する必要がありますか?
ManagedThreadIDは整数なので、スレッドが開始される前でも読み取ることができるので、スレッドが作成されたときに何かが割り当てられることを示唆します(番号自体であっても)。アプリケーションが2億のThreadsオブジェクトを作成することは奇妙なことですが、IDは解放に値するリソースであるように見えます。 – supercat
@supercat:興味深い点。 'ManagedThreadId'は順番に割り当てられているようです - あなたが20億人以上を作成した後に何が起こるのか分かりません。 –
Threadオブジェクトがファイナライズの対象となったときに、IDが再利用されるように見えるので、Threading.ThreadはIDIsposableではなくFinalizeを実装していると思われます。 – supercat