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