不处理task中的异常会怎么样?

jadetiger 2018-11-19 11:25:54
Task.Run(() =>
{
throw new Exception("");
});



主线程中运行这个,不会弹异常出来,debug的时候,里面会显示未处理的用户异常,如果我一直不管这个异常会有什么后果吗?还是线程池会把这个异常一直存起来,直到我无法通过task的返回值去引发AggregateException ,系统再自动垃圾收集保存的异常信息?
...全文
113 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-11-19
  • 打赏
  • 举报
回复
如果 task 没有返回值呢?连 AggregateException 可能都没有
你如何知道任务完成了没有呢?
  • 打赏
  • 举报
回复
task如果你不await或者Result不会将异常抛出来,这个异常直接被吃掉了
  • 打赏
  • 举报
回复
后果就是你一直心有余悸。没别的。
WM_JAWIN 2018-11-19
  • 打赏
  • 举报
回复
根据实际情况吧, 专门去try catch return 就没必须去管他了
wanghui0380 2018-11-19
  • 打赏
  • 举报
回复
对于task来说,默认处理异常是好习惯。因为task是基于“未来”编程,而“未来”如何其实没人知道。未来也许会挂掉,比如你在task里订阅一个东西,未来异常了,task挂了。结果是你订阅的东西也不见了。所以你的处理未来挂了情况(除非这个挂了,并不会影响结果,比如cancel这个玩意实际就是他给你抛了异常,这种挂了,我们说叫投毒,我自己故意毒死的,他是我自己让他死的,不影响结果)
游北亮 2018-11-19
  • 打赏
  • 举报
回复
既然是异常,就要去处理,或进行日志记录, 否则 造成的垃圾数据或其它未知异常,你的排查过程会很痛苦
  • 打赏
  • 举报
回复
在 Release 执行模式下,这个 Task 语句块里边的内容执行完毕之后,这个 Task 应该很快就被 GC 销毁了。在 Debug 之下可能要到当前所在的过程结束时才被 GC 销毁。但是无论如何,这个 Task 都被很快被自动销毁,不会非要等到进程结束。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧