c# - C# 事件处理程序应该是异常安全的吗?

标签 c# .net

假设一个事件有多个处理程序,如果任何一个事件处理程序抛出异常,则不会执行其余的处理程序。

这是否意味着事件处理程序永远不应该抛出异常?

最佳答案

因为调用事件意味着调用者不知道被调用者:

  1. 面对任意异常,调用事件处理程序应该是稳健的。调用堆栈上的所有内容都需要正确清理自己的困惑情况,以防发生完全意外的情况。

  2. 事件处理程序应该真正避免抛出异常。

像空引用异常这样的事情在任何代码中都是不可原谅的,所以显然我们并不关心它。

像文件 IO 异常这样的事情总是在写入或读取文件时发生,所以我会避免在事件处理程序中进行 IO。如果在事件处理程序中执行 IO 是有意义的,那么在处理程序中处理 IO 异常也是有意义的。不要将其传播回调用者。找到一些方法来处理它。

关于c# - C# 事件处理程序应该是异常安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2328815/

相关文章:

c# - 用空格替换 Unicode 字符 "�"

c# - 如何拆箱字符串数组?

c# - 使用 XmlReader.Create(uri) 防止或处理超时

c# - Windows 8.1 统一项目中的 Automapper 启动异常

c# - Process.Start() 不释放文件句柄

c# - 在 Dictionary<Key, Collection<Value>> 中自动创建集合

c# - 找不到“ApplicationException”

c# - .NET 动态方法。最棒的表演

c# - 我应该如何从 C# 调用这个 native dll 函数?

c# - 如何查看计算机上安装的 Windows Media Player 版本?