2017-04-05 35 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 

不过,这并不锁定所有的应用程序变量,但它确实防止单个应用程序变量从同一被更新时间。这使我能够在不同线程中更新不同的应用程序变量,而不会使所有线程暂停不适用于它们的应用程序变量。

相关问题