【问题标题】:Will IServiceProvider be disposed when the main application thread crashes?当主应用线程崩溃时,IServiceProvider 会被释放吗?
【发布时间】:2019-04-23 01:28:58
【问题描述】:

所以我知道 IServiceProvider 将在应用程序关闭(清理)时被释放,并且它管理的所有内容都将作为该操作的一部分进行释放。但是如果主线程抛出怎么办? IServiceProvider 还会被释放吗?

我问的原因是记录。在其他类型的应用程序中,我通常会用 try catch 包装主进程(在 main 方法中),然后在 finally 块中,我会确保刷新日志缓冲区。所以如果主线程抛出,日志总是被刷新。

可以肯定的是,我仍然可以这样做,但这意味着尝试查找对在启动期间创建的容器的引用,这感觉有点笨拙。我觉得将 ASP 的进程封装在内部以确保这种行为是一件显而易见的事情,所以它可能确实如此,但我想确定一下。

【问题讨论】:

  • Main 退出时,无论是由于应用程序关闭还是抛出异常,该过程都完成了。由于一切都受流程限制,因此处置不是问题。当进程消失时,进程消耗的所有内存和资源都会消失。但是,到达Main 的异常实际上只有在应用启动时抛出异常才会发生。异常处理中间件将捕获其他任何东西,防止整个进程崩溃。
  • 是的,我知道所有资源都会被释放,但我猜任何通常在这些 Dispose() 方法中运行的后续操作(如刷新日志缓冲区)都没有机会跑步。所以听起来异常过滤器是我唯一真正的选择?

标签: .net-core asp.net-core-2.1


【解决方案1】:

您可以在管道配置期间注册一个全局异常处理程序中间件,以处理任何未处理的异常。在 Configure() 中,您只需转到 app.UseExceptionHandler 并传递您的自定义处理程序(或 lambda)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多