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