Reputation: 2185
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
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
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