スレッドプール スレッドのカルチャを変更すると、スレッドがプールに戻されたときに影響を受けますか?
-
13-09-2019 - |
質問
を設定した場合 CurrentCulture
スレッド プールのスレッドの場合、スレッドが実行を終了してスレッド プールに戻されるとどうなりますか?それはわかりますか CurrentCulture
(それが何を意味するにせよ) デフォルトにリセットしますか? それとも、設定したカルチャは保持されますか?
これを防ぐためにフレームワークがスレッドをデフォルトの状態にリセットすることを期待していますが、これに関するドキュメントが見つかりません。私が見つけた最も近いものは、MSDN ドキュメントからのものです。 スレッドプール:
スレッドプールがスレッドを再利用する場合、スレッドローカルストレージまたはスレッドスタティックアトリブ属性でマークされたフィールドのデータはクリアされません。したがって、1つの方法でスレッドローカルストレージに配置されたデータは、同じスレッドプールスレッドによって実行される他のメソッドに公開できます。
これは、スレッドが ない 返却時にリセットされます。
これをテストするためにいくつかのサンプルコードを試してみましたが、 する カルチャがリセットされているようですが、ThreadPool のスレッドの小さなサブセットのみを使用していると思うので、この動作を正しくテストしているかどうか確信が持てません。そのため、すでにそのスレッドが存在するスレッドをテストしているかどうかはわかりません。カルチャーセット。
解決
ThreadPool には依存しません これまで 特に引用したテキストが原因で、情報がリセットされます。
スレッド プールのカルチャを「変更する」ことが心配な場合は、スレッド タスクが完了したときに必ずリセットしてください。これは十分に単純なタスクです。
現在のスレッドプールがこれを行うとは思えませんが、たとえそれがあったとしても した, .NET 4 以降の ThreadPool 実装が変更されないと仮定するのは安全ではありません。