_ = Task.Run(async() => {try{throw new NotImplementException();await Task.Delay(1);}catch(Exception ex){Debug.WriteLine(ex);} }
fire and forget 的异步后台任务,用 try-catch 包裹起来。
Task.Run 会把我们的任务放到线程池上去执行。
而异步 async await 关键字为我们创造了一个状态机,并把 exception 包装成了一个 Task Exception。
上面的代码,如果没有 await Task.Run,这个包装后的任务异常,就不会返回到调用线程,导致调试器也捕捉不到该错误。
catch 后至少能快速在 Output 窗口定位问题。