捕获全局异常是处理重新连接的好方法吗?
本文关键字:方法 重新连接 处理 全局 异常 | 更新日期: 2023-09-27 18:30:27
我有一个不断增长的应用程序,其中包含多个用户控件,Windows等,这些用户控件,Windows等都通过打开程序(登录到服务器)时建立的套接字发送大量数据。如果服务器死了或类似的事情,我希望能够以更优雅的方式处理随后的 SocketException,而不是将几乎每个代码块包装在该特定异常的 try-catch 语句中。
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
使用它应该捕获任何引发的未经处理的异常,简单地检查异常是否是套接字异常,然后启动"您已断开连接,请重新连接"代码是一个坏主意吗?使用此应用程序,您可以放心地假设 99% 的任何套接字异常都是由于服务器断开连接造成的。
当我讨论这个主题时,您知道如何在捕获异常类型后检查它吗?使用上面的代码,我可以简单地使用 e.Exception 获得原始异常。我真的不确定如何措辞 if 语句来检查异常的类型。
恕我直言,这是一个非常糟糕的主意......
更好的解决方案是将访问套接字的代码移动到它自己的类中......应用程序中需要与服务器交互的任何内容都会通过该类......这样,任何与套接字相关的异常都可以在一个中心位置相应地处理。
Using that should catch any unhandled exception that gets thrown
捕获所有异常,在那里您可以做很少的事情不是一个好主意。
Eric Lippert有一篇关于处理什么异常的非常好的文章。
我同意 Yahia 的观点,即访问 Socket 的代码移动到它自己的类。
public class SocketHandling
{
//if Something goes wrong, throw exception. It is up to the caller how to handle the exception.
}
main()
{
try
{
}
catch(SocketRelatedException)
{
//handle the exception.
}
}
我认为检查异常类型不是不好的做法。
catch(Exception ex)
{
if (ex is System.Net.Sockets.SocketException)
{
doSomething(ex);
}
else
throw;
}
此外,您可以只捕获特定的异常类型...