处理异常的最佳实践,它在catch块中抛出,在一个线程中.(.净)

wei*_*in8 5 .net c# multithreading exception-handling

您对在线程执行中处理异常有何看法?更具体地说,如果在try-catch子句的catch块中抛出异常怎么办?如果异常未处理,线程会发生什么?

Joh*_*ers 8

我不得不反对仁,或者至少听说他的意思.

只有处理异常才能实际处理它们.只有你可以对出了什么问题做些什么,或者添加信息.不要因为你可以处理它们.

try {
    // ..
} catch (Exception ex) {
    Console.WriteLine(ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

以上是非常糟糕的.首先,您不显示整个异常,而只显示消息.其次,你让事情继续下去,而你不知道这个过程处于什么状态.


rei*_*ein 7

您对在线程执行中处理异常有何看法?

您应该尽可能地处理异常,并且只要您预期异常.澄清:我完全赞同约翰,你不应该处理各地的例外情况 - 只有你可以对它们做些什么.但是,您永远不应该在线程中处理异常,因为这会导致严重的问题.有一个root异常处理程序,让你的线程正常死亡(在记录问题之后......)

更具体地说,如果线程被抛入try-catch子句的catch块中,该怎么办?

你的意思是:如果在catch块中抛出异常怎么办?好吧,然后它被当前的try-catch块无法处理.最好不要在catch块中放置太多处理以尽可能避免这种情况.

如果线程未处理,线程会发生什么?

你的意思是:如果异常未处理,线程会发生什么?它死了.

正如本提到的那样:

线程中未捕获的异常会在线程的AppDomain中触发UnhandledException.您可以通过添加事件处理程序来监视这些:

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Run Code Online (Sandbox Code Playgroud)