dotnetCampus.Ipc icon indicating copy to clipboard operation
dotnetCampus.Ipc copied to clipboard

此 IPC 库的异常处理原则

Open walterlv opened this issue 3 years ago • 0 comments

异常类型

  • IpcException 抽象异常,永远不应该抛出,只允许被 catch
    • IpcRemoteException 表示异常来自可正常连接并通信的其他端
      • IpcInvalidRemoteRequestException 当 IPC 收到来自其他端的请求时,此请求无法被理解
      • IpcInvalidRemoteResponseException 当 IPC 向其他端发起请求并收到其他端的响应后,此响应无法被理解
      • 具体被序列化和反序列化的异常 当其他端引发了异常,并通过 IPC 传过来时,此异常会被反序列化并重新抛出
      • IpcRemoteException 当其他端引发了异常,并通过 IPC 传过来时,如果此异常无法被反序列化,则抛出此异常
    • IpcConnectionException 表示 IPC 无法正常连接其他端,或连接被断开
    • IpcLocalException 表示异常发生在开始 IPC 通信之前或已完成 IPC 通信之后的本地,并且此异常表示 IPC 相关的错误(例如试图传输无法被序列化的类型等)

特别说明

框架内也可能会发生一些意料之外的异常。如果该异常发生在开始 IPC 通信之前或已完成 IPC 通信之后的本地,则应抛出 IpcLocalException,如果该异常发生在其他端但无法反序列化到本地,则抛出 IpcRemoteException

框架应该适当抛出使用错误的异常(例如 ArgumentNullExceptionInvalidOperationExceptionNotSupportedException 等),但不应该抛出实现异常(例如 InvaldCastExceptionNullReferenceException 等)。如果出现后者,能处理的应正确处理,不能处理的应抛出 IpcLocalExceptionIpcRemoteException

框架应正确处理 null 或 default,必须拥有正确的含义且不能与 IPC 传输的有意义的 null 或 default 混淆。

walterlv avatar Oct 11 '21 07:10 walterlv