【发布时间】:2017-06-22 01:44:26
【问题描述】:
我正在移植到 .NET 核心,现有应用程序已挂钩 win32 调用 SetConsoleCtrlHandler 以捕获应用程序关闭,以便它可以干净地关闭打开的数据库文件和其他有序的关闭任务。
我需要在 .NET 核心中做同样的事情,我能看到的唯一选择是通过连接到 IApplicationLifetime ApplicationStopping.Register 来使用 ASP.NET。但是,这仅捕获 Ctrl-C 并且如果最终用户或系统终止 win32 调用将执行的控制台应用程序(例如系统重新启动)则不起作用。
另一个选项是通过 AppDomain (AppDomain.CurrentDomain.ProcessExit) 但 AppDomain 在 dotnet Core 中不可用。
有序的应用关闭很重要,我担心生产系统中的数据损坏,因此需要实现等效的东西,并且新应用将在 Windows 和 Linux 操作系统的混合上运行。
我是否错过了 dotnet core 中的一个函数来执行此操作?还是我必须重新实现 win32 关闭挂钩以及 Linux 上的任何等效项?
【问题讨论】:
-
有人对如何最好地解决这个问题有任何想法吗?
-
你当然不应该有任何打开的数据库文件。
标签: c# linux windows asp.net-core .net-core