dotnet核心捕获关闭优雅关闭

dea*_*dob 9 c# linux windows .net-core asp.net-core

我正在移植到.NET核心,现有的应用程序已经挂钩win32调用SetConsoleCtrlHandler来捕获应用程序关闭,以便它可以干净地关闭打开的数据库文件和其他有序的关闭任务.

我需要在.NET核心中做同样的事情,我能看到的唯一选择是通过挂钩到IApplicationLifetime ApplicationStopping.Register来使用ASP.NET.但是,如果最终用户或系统终止win32呼叫将控制的控制台应用程序(例如,系统重启),则仅捕获Ctrl-C并且不起作用.

另一个选项是通过AppDomain(AppDomain.CurrentDomain.ProcessExit),但是在dotnet Core中没有AppDomain.

有序的应用程序关闭很重要,我担心生产系统中的数据损坏,因此需要实现等效的东西,新的应用程序将在Windows和Linux操作系统的混合上运行.

我是否错过了dotnet核心中的功能?或者我是否必须重新实现win32关闭钩子以及Linux上的等效物?

Mar*_*ist 4

AppDomain.CurrentDomain.ProcessExit活动现已在 .NET Core 2.0 中提供,我可以确认它在 Linux 上运行良好。在 .NET Core 2.0 之前,AssemblyLoadContext.Default.Unloading可能是一个可行的替代方案。