是否可以在 .Net 中锁定单个应用程序变量



在.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中持久化,如果整个状态在更改时序列化,那么您绝对不能这样做。

相关内容

  • 没有找到相关文章

最新更新