Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

catch block not catching exception in another thread

method A()
{
  try
  {
    Thread t = new Thread(new ThreadStart(B));
    t.Start();
  }
  catch(exception e)
  {
    //show message of exception
  }      

}

method B()
{
 // getDBQuery
}

a exception in B but not catched. does it legal in .net?

like image 983
SleeplessKnight Avatar asked Nov 21 '25 16:11

SleeplessKnight


2 Answers

Correct, exceptions from a Thread are not forwarded to the caller, the Thread should handle this by itself.

The most general answer is that you should not be using a (bare) Thread here. It's not efficient and not convenient.

When you use a Task, the exception is stored and raised when you cal Wait() or Result.

like image 137
Henk Holterman Avatar answered Nov 23 '25 06:11

Henk Holterman


When A is finished executing B might still be running as it is on an independent thread. For that reason it is impossible by principle for A to catch all exceptions that B produces.

Move the try-catch to inside of B. The Thread class does not forward exceptions.

Better yet, use Task which allows you to propagate and inspect exceptions.

like image 36
usr Avatar answered Nov 23 '25 05:11

usr