【发布时间】:2019-04-23 01:28:58
【问题描述】:
所以我知道 IServiceProvider 将在应用程序关闭(清理)时被释放,并且它管理的所有内容都将作为该操作的一部分进行释放。但是如果主线程抛出怎么办? IServiceProvider 还会被释放吗?
我问的原因是记录。在其他类型的应用程序中,我通常会用 try catch 包装主进程(在 main 方法中),然后在 finally 块中,我会确保刷新日志缓冲区。所以如果主线程抛出,日志总是被刷新。
可以肯定的是,我仍然可以这样做,但这意味着尝试查找对在启动期间创建的容器的引用,这感觉有点笨拙。我觉得将 ASP 的进程封装在内部以确保这种行为是一件显而易见的事情,所以它可能确实如此,但我想确定一下。
【问题讨论】:
-
当
Main退出时,无论是由于应用程序关闭还是抛出异常,该过程都完成了。由于一切都受流程限制,因此处置不是问题。当进程消失时,进程消耗的所有内存和资源都会消失。但是,到达Main的异常实际上只有在应用启动时抛出异常才会发生。异常处理中间件将捕获其他任何东西,防止整个进程崩溃。 -
是的,我知道所有资源都会被释放,但我猜任何通常在这些 Dispose() 方法中运行的后续操作(如刷新日志缓冲区)都没有机会跑步。所以听起来异常过滤器是我唯一真正的选择?
标签: .net-core asp.net-core-2.1