Skip to content

此 IPC 库的异常处理原则 #40

@walterlv

Description

@walterlv

异常类型

  • 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 混淆。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions