2017-04-05 76 views
3

在.NET Web服務,您可以設置應用程序級的變量這樣你可以在.Net中鎖定一個應用程序變量嗎?

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

如果您收到多個請求,你可以簡單地鎖,然後更新,然後解鎖

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

現在,這一切鎖定應用程序變量,是否有辦法鎖定一個應用程序變量?而不是一次所有的應用程序變量?

+0

您應該知道,應用程序級變量的主要理由是與傳統ASP應用程序向後兼容。對於現代ASP.NET應用程序,有更好的解決方案,例如在受鎖(C#)或SyncLock(VB.NET)語句保護的類中使用靜態字段。 – Joe

回答

0

請參閱有關Application.Lock的文檔。

Lock方法阻止其他客戶端修改存儲在Application對象中的變量,確保一次只有一個客戶端可以更改或訪問應用程序變量。

所以看起來像答案是否定的。除非您提供自己的自定義鎖定策略,並放棄使用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 

不過,這並不鎖定所有的應用程序變量,但它確實防止單個應用程序變量從同一被更新時間。這使我能夠在不同線程中更新不同的應用程序變量,而不會使所有線程暫停不適用於它們的應用程序變量。

相關問題