TL; DR- 不,您不应该只是悄悄地忽略异常。
让我们看看这些假设。
我已经学会相信,.NET中的许多决定都是由真正知道自己在做什么的人做出的,并且通常在他们做出决定的背后有很好的理由。但是这个逃脱了我。
毫无疑问,MS的工作人员确实非常聪明。他们还拥有许多……无能为力并且一贯做出错误决定的经理和高管。尽管我们想相信技术精明的科学家推动产品开发的童话,但现实却更加严峻。
我的意思是,如果您的直觉告诉您某些问题可能是错误的,那么很有可能(以及过去的先例)这是错误的。
在这种情况下,如何处理例外情况是人为因素决定的,而不是技术决定。松散地,异常是一个错误。即使格式不正确,错误的表示也可以为最终用户提供重要信息。也就是说,出了点问题。
考虑一下最终用户与开发人员之间的这种假设对话。
用户:该应用程序已损坏。
开发人员:怎么了?
用户:我不知道,我单击按钮没有任何反应。
开发人员:您什么意思什么都没发生?
用户:看,我单击,我等待,然后我等待,然后我等待,什么都没有...显然已经坏了。
我们可怜的,幸运的是,假设的开发人员现在必须找出事件链中出了什么问题。在哪
事件处理程序通知->处理事件的例程->处理程序触发的方法->异步调用的开始-> OSI网络的7层->物理传输->备份OSI网络的7层->接收服务->服务调用的方法-> ...->返回服务发送的回复-> ....->收到收据->处理收到的回复-> ...
并且请注意,我已经掩盖了几个潜在的错误路径。
在解决了一些基本假设之后,我认为现在变得更加清楚为什么安静地抑制异常是一个坏主意。异常和相关的错误消息是向用户指示发生问题的关键指示器。即使该消息对最终用户而言毫无意义,但嵌入的信息对于开发人员了解问题所在也很有用。如果他们很幸运,该消息甚至可以引导您找到解决方案。
我认为问题的一部分在于,错误处理的异常将使您的应用程序崩溃。通过抑制异常,应用程序将不会崩溃。这样做有一定的道理,因为异步的目的是允许应用程序在检索数据时保持工作状态。逻辑上的扩展并不是说,如果您可以在等待结果的同时继续操作,那么检索失败也不会使应用程序崩溃-异步调用被隐式声明为不足以终止应用程序。
因此,这是一个解决方案,但它正在解决错误的问题。为异常处理提供包装器并不需要花费太多精力,从而使应用程序可以保持运行。捕获异常,将错误消息抛出到屏幕或记录下来,并允许应用程序继续运行。抑制异常意味着忽略错误将是可以的,并且您的测试将确保异常永远不会逃逸到现场。
因此,我的最终评估是,这是一个半生半熟的尝试,目的是解决在人们还没有准备好将思维转向该方法时将他们推入异步模型所产生的问题。