私のasp.netアプリケーションでは、いくつかのデータをにキャッシュしたいと思いますHttpApplicationState。
データを設定するための私のコードは次のようになります。
Application.Lock();
Application.Set("Name", "Value");
Application.UnLock();
ドキュメントを読むと、それHttpApplicationStateは暗黙的にスレッドセーフであると書かれています。しかし、多くのブログでは、にデータを書き込むときに使用する必要があるApplication.Lock()と書かれています。Application.Unlock()HttpApplicationState
一方、メソッドからデータを読み取るとき、HttpApplicationStateまたはメソッドをクリアするとき(を使用してApplication.RemoveAll())にロックを使用する必要があるというドキュメントは見つかりませんでした。
私の質問は次のとおりです。
- 電話をかけるときは、スレッドセーフに注意を払うべきではありません
RemoveAllか?私のアプリケーションでは、1つのスレッドがからデータを読み取っているのHttpApplicationStateに対し、他のスレッドはを呼び出す可能性がありますRemoveAll。 - この場合、
HttpApplicationState2つの異なるスレッドから同時に読み取りとクリアが可能な場合、読み取りもスレッドセーフではないでしょうか。