Whenever a thread in my ThreadPool throws an exception, my code seems to be stuck at the catch block inside the thread function. How do I get the exception back to the main thread?
The best practice is that your background threads should not throw exceptions. Let them handle their exceptions on their own.
Ideally you should wrap the code in your method that executes on a thread in a try-catch block and handle the exception in the catch block. Do not re-throw it from the catch block.
Read this for more details. http://www.albahari.com/threading/#_Exception_Handling