Как описано в документации, вам нужно вызвать wait для объекта задачи, чтобы перехватить любое исключение в задаче. С исправлением кода ниже основной поток сможет перехватить исключение.
try
{
Task taskObj = Task.Factory.StartNew(Go);
Thread.Sleep(2000);
Console.WriteLine("Executing on Main thread");
taskObj.Wait();
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
static void Go()
{
Console.WriteLine("In the thread pool!");
throw new Exception();
}