我在网页的关键部分使用以下代码

if(Monitor.TryEnter(lockObj,60000))
{
  try{
       //write some things to a file
     }
  finally
  {
    Monitor.Exit(lockObj);
  }
}


在这里,lockObj是该类的静态成员。我的问题是,如果用户在执行关键部分时关闭网页或浏览器,会发生什么? lockObj是否保持锁定以用于将来的页面请求?

最佳答案

如果请求仍在处理中,则当用户关闭浏览器窗口或导航到另一个页面时,不会自动发生任何事情。这就是HttpResponse.IsClientConnected属性存在的原因-因此您的代码可以在执行有用的操作时执行适当的检查。

如果服务器端发生超时,则finally块应在该时间左右运行,并且锁将被释放。只有此时您才能确定是否可以安全释放锁定-锁定必须出于某种原因而已,并且如果发生超时,则可能意味着(共享的,需要锁定的状态)不存在。对于下一个获得锁的人来说都不稳定。

但是,这是两组截然不同的问题。

关于c# - C#监视用户退出应用程序时的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13230425/

10-12 02:01