8

スレッド プール スレッドのを設定したCurrentCulture場合、スレッドが実行を終了してスレッド プールに戻されるとどうなりますか? デフォルトにリセットされますかCurrentCulture(それが何を意味するにせよ)、それとも私が設定した文化を保持しますか?

フレームワークがこれを防ぐためにスレッドをデフォルトの状態にリセットすることを望んでいますが、この効果に関するドキュメントが見つかりません。私が見つけた最も近いものは、ThreadPoolの MSDN ドキュメントからのものです。

スレッド プールがスレッドを再利用する場合、スレッド ローカル ストレージまたは ThreadStaticAttribute 属性でマークされたフィールドのデータは消去されません。したがって、あるメソッドによってスレッド ローカル ストレージに配置されたデータは、同じスレッド プール スレッドによって実行される他のメソッドに公開される可能性があります。

これは、スレッドが返されたときにスレッドがリセットされていないことを示しているようです。

これをテストするためにいくつかのサンプル コードを試しましたが、文化がリセットされたように見えますが、ThreadPool のスレッドの小さなサブセットしか使用していないと思うため、この動作を正しくテストしているとは確信できません。そのため、既にカルチャが設定されているスレッドをテストしているとは確信できません。

4

1 に答える 1

8

特にあなたが引用したテキストのために、ThreadPoolが情報をリセットすることに依存しません。

スレッド プールのカルチャを「変更」することを心配している場合は、スレッド化されたタスクが完了したときに必ずリセットします。これは簡単な作業です。

現在のスレッドプールがこれを行うとは思いませんが、たとえそうであったとしても、.NET 4+ の ThreadPool 実装が変更されないと想定するのは安全ではありません。

于 2009-09-23T16:39:54.587 に答える