_ = Task.Run(async () =>... 小心 fire-and-forget 异步任务的异常捕获
1._ = Task.Run(async () =>... 小心 fire-and-forget 异步任务的异常捕获
2.if-else 二则?只要 if,不要 else3.空字符串,空集合,初始化用他们4.不是库作者?停止 task.ConfigureAwait(false)_ = 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 窗口定位问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)