Catching unhandled exception on separate threads

后端 未结 3 2124
隐瞒了意图╮
隐瞒了意图╮ 2020-11-28 12:34

I am using the following event to catch unhandled exceptions in the main UI thread.

Application.ThreadException 

Unfortunately, it does not

3条回答
  •  半阙折子戏
    2020-11-28 13:08

    @Ani have already answered your question. Although I don't agree that unhandled exceptions in threads should terminate applications. Using threads usually means that you have some kind of server application. Bringing it down could result in a lot of angry users.

    I've written a small piece about proper exception handling: https://coderr.io/exception-handling

    You should always catch exceptions for threads. I usually use the following pattern:

      void ThreadMethod(object state)
      {
          try
          {
              ActualWorkerMethod();
          }
          catch (Exception err)
          {
              _logger.Error("Unhandled exception in thread.", err);
          }
      }
    
      void ActualWorkerMethod()
      {
          // do something clever
      }
    

    It's a whole lot easier to find thread methods that doesn't handle exceptions properly by moving the logic into a seperate method and just keep the try/catch block in the thread method.

提交回复
热议问题