在.Net Web服务中,您可以像这样设置应用程序级变量
application("Stackoverflow") = "Stack"
application("Serverfault") = "Server"
如果您收到多个请求,则可以直接锁定,然后更新,然后解锁
try
application.lock()
application("Serverfault") = "Fault"
finally
application.unlock()
end try
现在,这会锁定所有应用程序变量,有没有办法只锁定一个应用程序变量?而不是一次性所有的应用程序变量?
答案 0 :(得分:0)
请参阅Application.Lock上的文档。
Lock方法阻止其他客户端修改存储在Application对象中的变量,确保一次只有一个客户端可以更改或访问Application变量。
所以看起来答案是否定的。除非您提供自己的自定义锁定策略并放弃Application.Lock()
的使用,否则我不确定状态是如何在Application
中保留的,如果整个状态在更改时序列化,那么您可以绝对不会这样做。
答案 1 :(得分: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
但它不会锁定所有应用程序变量,但它确实会阻止单个应用程序变量同时更新。这使我能够在不同的线程中更新不同的应用程序变量,而不会使所有线程暂停不适用于它们的应用程序变量。