SleeplessKnight
SleeplessKnight

Reputation: 2185

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?

Upvotes: 2

Views: 536

Answers (2)

Henk Holterman
Henk Holterman

Reputation: 273314

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.

Upvotes: 7

usr
usr

Reputation: 171206

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.

Upvotes: 4

Related Questions