C#监视用户退出应用程序时的行为

时间:2012-11-05 10:42:53

标签: c# asp.net synchronization try-finally

我将以下代码用于网页的关键部分

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

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

2 个答案:

答案 0 :(得分:3)

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

如果服务器端发生超时,那么finally块应该在那个时间运行,锁定将被释放。是否安全以便在此时释放锁定是您可以确定的 - 锁定必须放在那里是有原因的,如果发生超时,则可能意味着(共享,锁定需要状态)对于下一次获得锁定的人来说是不稳定的。

但这些是两组非常不同的问题。

答案 1 :(得分:0)

如果你以某种方式设法杀死

中的执行线程
try {
  //write some things to a file
}
你可能有一些问题。但对于所有具有例外情况的现实情况,代码都将起作用。

实际上,只需避免Thread.Abort