我正在编写一个即时消息库。目前,当在读取或写入套接字时引发 SocketException 时,我从应用程序内部启动注销例程,将 SocketException 作为 LogoutEventArgs 的参数传递给最终用户。这为最终用户提供了一种查看底层异常实际导致未请求注销的方法。
我的问题是,如果在用户调用 Logout 函数期间,套接字实际上抛出了异常,我该怎么办。
示例 - 最终用户调用 Logout 函数,并且当 logout 函数正在等待现有请求正常结束时,套接字在读取线程中抛出异常。
在我看来,我有两个选择-
假装错误没有发生,就像我们的注销过程中断开的套接字一样。
当引发套接字异常时,查看是否正在发生注销请求,如果是,则覆盖它。导致原始注销请求引发 AlreadyLoggedOutException,以及在 LogoutEventArgs 中传递异常的单独注销事件。
此外,稍微相关 - 如果服务器启动未请求的关闭,我该怎么办(即.. 读取调用返回 null).. 如果您向它发送请求,.NET Messenger 服务器倾向于执行此操作不喜欢。我是否将其视为一个例外?
我发现我的图书馆的整个断开/注销部分是我身边的主要刺。我似乎无法绕过它。有谁知道任何可以很好地处理这种情况的开源代码应用程序?
我一直试图在脑海中解决这个问题,这让我发疯。