我将以下代码用于网页的关键部分
if(Monitor.TryEnter(lockObj,60000))
{
try{
//write some things to a file
}
finally
{
Monitor.Exit(lockObj);
}
}
这里,lockObj是该类的静态成员。我的问题是,如果用户在关键部分执行时关闭网页或浏览器会发生什么? lockObj是否会为将来的页面请求保持锁定状态?
答案 0 :(得分:3)
如果请求仍在处理,当用户关闭浏览器窗口或导航到其他页面时,不会自动发生任何事情。这就是HttpResponse.IsClientConnected
属性存在的原因 - 因此您的代码可以执行适当的检查,以及何时可以执行有用的操作。
如果服务器端发生超时,那么finally
块应该在那个时间运行,锁定将被释放。是否安全以便在此时释放锁定是您可以确定的 - 锁定必须放在那里是有原因的,如果发生超时,则可能意味着(共享,锁定需要状态)对于下一次获得锁定的人来说是不稳定的。
但这些是两组非常不同的问题。
答案 1 :(得分:0)
如果你以某种方式设法杀死
中的执行线程try {
//write some things to a file
}
你可能有一些问题。但对于所有具有例外情况的现实情况,代码都将起作用。
实际上,只需避免Thread.Abort
。