你能在.Net中锁定一个应用程序变量吗?

时间:2017-04-05 15:48:39

标签: asp.net web-services locking

在.Net Web服务中,您可以像这样设置应用程序级变量

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

如果您收到多个请求,则可以直接锁定,然后更新,然后解锁

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

现在,这会锁定所有应用程序变量,有没有办法只锁定一个应用程序变量?而不是一次性所有的应用程序变量?

2 个答案:

答案 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

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