设想:
有一个 web 应用程序,其中没有用户在处理任何任务。该任务仅分配给该用户,在它被释放之前没有人可以处理相同的任务。我在数据库中使用了一个标志来实现这一点。当用户关闭或注销应用程序时,一切都运行良好。 但是,如果页面崩溃或突然关闭,则标志保持不变,记录仍为该用户锁定。
请提出任何替代方案......或如何实现这一目标..
这更像是您可能与您的客户(或您自己)一起考虑的应用程序流程。
作为建议,当该用户进入网站时,您可以检查该标志是否为真。在这种情况下,您可能会提醒用户他有待解决的更改并继续保存或丢弃它们。
另一个建议,如果您及时自动保存任务,例如每隔 5 分钟,那么如果用户关闭页面,他将失去最多 5 分钟的工作。
但同样,这完全取决于此功能的目标以及您希望它如何运行并与用户交互。
您可以使用 Global.Asax 中的 Application_Error 来处理这个问题。
http://www.wduffy.co.uk/blog/using-application_error-in-asp-net-mvcs-global-asax-to-handle-errors/
您可以设置记录可以保持锁定多长时间的超时,以及在页面上进行某种刷新,以便只要它处于打开状态,它就会不断重新启动超时。
您还可以编写一个窗口/页面,允许您查看当前的锁,以便您可以手动释放任何不再处于活动状态的锁,尽管超时可能没有必要。