c# - 如果您手动检测到线程错误,则抛出适当的异常

标签 c# multithreading exception

假设我编写了一些多线程 C# 代码。 (我知道......从一开始就是个坏主意;))

我有一些代码 B,我希望只有在代码 A 完成后才会调用它。我仔细编写和审查我的代码以说服自己这是真的,但我实际上无法强制执行这种期望,我只能检查它是否正确。

所以我把检查放进去,如果检查失败,我想抛出异常,这样开发人员就会收到一条大喊大叫的日志消息,上面写着“不,你搞砸了;仍然存在线程无法执行的边缘情况你说服自己它确实做到了。”

什么是最好的 C# Exception输入扔在这里?

我的直觉是选择那个老替补InvalidOperationException或者可能只是一个原始的new Exception(message) .但是如果我可以抛出一个稍微更具体的类型会很好(比如抛出 ArgumentException 当这是发生的问题时)

有几个ExceptionThread 自动完成的类型或 Sync但它们看起来都是为了解决更深层次的问题。即实际线程有问题。这里的线程都很好......这是开发人员的线程逻辑错误。

是否有任何明智的预先存在的Exception在这里使用的类?

最佳答案

一个 InvalidOperationException是最适合这种情况的内置异常。

看它是official documentation remarks section:

InvalidOperationException is used in cases when the failure to invoke a method is caused by reasons other than invalid arguments. Typically, it is thrown when the state of an object cannot support the method call.



(强调我的)。

当然,没有什么能阻止您创建自己的 Exception如果你想要更具体的东西,那么只有当你希望异常携带不适合 InvalidOperationException 的信息时才有意义。 (当然,如果您确实选择创建自己的异常类,请务必遵循 How to create user-defined exceptions 中的指南:
  • 从现有的 Exception 派生类(class)
  • 使用 Exception 这个词作为类名的后缀 ( MyVeryOwnSpecialException )
  • 至少实现三个公共(public)构造函数:
    3.a:没有参数的构造函数
    3.b:接受字符串消息的构造函数
    3.c:接受字符串消息和异常内部异常的构造函数。
  • 关于c# - 如果您手动检测到线程错误,则抛出适当的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60691111/

    相关文章:

    c - 对多个生产者单个消费者循环缓冲区进行故障排除

    java连接方法

    c# - 为什么 Visual Studio 不强制执行 try-catch-block 实现?

    java - 返回 HttpStatus 代码的更好方法 Spring REST

    c# - 如何知道是否在两个检查点之间触发了 gen full 垃圾回收?

    c# - 使用 C# 检查 IIS 中是否启用了表单例份验证

    ios - CoreData 嵌套上下文 : what is the proper way to save context?

    c# - Serilog `rollOnFileSizeLimit` 不适用于配置文件

    c# - 如何从磁盘读取 .fit 文件

    ios - 为什么我的 UITableView 会出现 NSInternalInconsistencyException 异常?