2017-04-05 9 views
3

あなたは今.NETで1つのアプリケーション変数をロックできますか? .NET Webサービスで

try 
    application.lock() 
    application("Serverfault") = "Fault" 
finally 
    application.unlock() 
end try 

のロックを解除し、その後、あなたが複数の要求を受け取った場合、あなたは、単に更新し、ロックすることができます。この

application("Stackoverflow") = "Stack" 
application("Serverfault") = "Server" 

のようなアプリケーションレベルの変数を設定することができ、これはすべてのロックアプリケーション変数は、ただ1つのアプリケーション変数をロックする方法ですか?一度にすべてのアプリケーション変数の代わりに?

+0

アプリケーションレベル変数の主な原因は、従来のASPアプリケーションとの下位互換性であることに注意してください。現代のASP.NETアプリケーションでは、ロック(C#)またはSyncLock(VB.NET)ステートメントで保護されたクラスで静的フィールドを使用するなどの優れたソリューションがあります。 – Joe

答えて

0

Application.Lockのドキュメントを参照してください。

Lockメソッドは、他のクライアントがApplicationオブジェクトに格納された変数を変更するのをブロックし、一度に1つのクライアントのみがアプリケーション変数を変更またはアクセスできるようにします。

答えは「いいえ」のようです。あなた自身のカスタムロック戦略を提供してApplication.Lock()の使用を諦めていない場合でも、状態が完全に変更された場合には、Applicationの状態が永続化されているかどうかわかりません。

0

興味深いことに、私は研究していた別の問題を抱えていました。これは、私が投稿した問題の解決策を私に提供してくれると思います。

この:

Using mutex = New Mutex(False, "LockServerFault") 
     mutex.WaitOne() 
     application("ServerFault") = "Fault"          
     mutex.ReleaseMutex() 
    End Using 

は、同じことを実現:

try 
    application.lock() 
    application("Serverfault") = "Fault" 
finally 
    application.unlock() 
end try 

しかし、それはすべてのアプリケーション変数をロックしていないが、それは同じで更新されることから、単一のアプリケーション変数を防ぐん時間。これにより、アプリケーション変数を適用しないスレッドに対してすべてのスレッドを一時停止させることなく、異なるスレッドで異なるアプリケーション変数を更新することができます。

関連する問題