c#task中的异常怎么捕获
大致有两种方式
1) 调用 Task 的 Wait 方法时使用 try-catch 捕获异常:

var testTask = TestAsync(5, -10);try { testTask.Wait();}catch(Exception ex) { Console.WriteLine(ex);}

2)在 Task 的 ContinueWith 方法中读取 Task 的 Exception 属性:
var testTask = TestAsync(5, -10);testTask.ContinueWith(task => { if (task.IsFaulted) { Console.WriteLine(task.Exception.GetBaseException()); } else { Console.WriteLine(task.Result); }});
WaitForSingleObject异常怎么捕获
异常应该在线程的执行代码中捕获,在WaitForSingleObject当然无法捕获异常。

WaitForSingleObject函数等待线程处理完毕。
如果传入一个0值,则表示超时,这将令WaitForSingleObject马上返回,
并且指出线程是否已经完成。如果线程没有完成,WaitForSingleObject返回WAIT_TIMEOUT。
因而它只能告诉你操作是否完成或超时,你要捕捉错误,应该在线程中