Why exceptions thrown within a task are silent exception and you never know if a certain exception has been thrown
try { Task task = new Task( () => {
I think you are not getting exception in case of Task because you are not waiting for exception in the main thread. You are just continuing. Put task.Wait() and you will get the exception in main thread.
Task
task.Wait()