.net - 是否可以将网络异常用于控制流?

标签 .net sockets exception-handling

我今天正在做一些.NET编码,遇到了以前从未想过的事情-Microsoft的许多测试网络连接性的内置方法(ping,TCP套接字等)对于抛出异常非常自由,如果连接失败。

当然,在一般情况下,在程序的控制流中使用异常不是很好。不过我很好奇-如果.NET库很容易将它们抛出,我该如何避免这样的事情(请原谅可能是凌乱的代码,仅举一个例子):

bool TestConnection(string host)
{
    bool connected;

    Ping ping = new Ping();
    PingReply reply = ping.Send(host);

    connected = (reply.Status == IPStatus.Success);

    return connected; // possibly won't return false because of exceptions
}

我可以使用try-catch块来处理异常,但是我要做的就是将connected设置为false。从我丢弃异常中的所有信息以来,这是否基本上就完全吞噬了异常?最佳做法是什么?

最佳答案

您一定应该捕获.NET Framework引发的异常,并且不要假设唯一可以做的就是返回false,这取决于您的应用程序设计和用例,您可能会重新引发该异常并通知上层网络路径例如,输入的输入不再存在,或者在其他情况下返回false并忽略该问题。

.NET Framework是我们用来构建事物的基础,并且必须是通用的。如果您尝试打开一个不存在的文件,它会抛出FileNotFoundException,则在某些情况下您会创建它,而在其他情况下会告诉用户您找不到文件...它始终取决于您自己的代码,应采用防御性方法避免或捕获基本异常。 :)

关于.net - 是否可以将网络异常用于控制流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007484/

相关文章:

c# - 已加载事件未在 Silverlight 中触发

c# - ExceptionAggregator.cs 在哪里

c# - 更改应用程序中多个表单样式的最简单方法是什么?

c# - 来自 HttpWebRequest 的详细时间信息

php - Apache2 运行一段时间正常,然后停止提供内容,重启时出错

c# - Visual Studio为什么无法识别RuntimeBinderException?

Linux内核套接字编程:sendmsg function msg address can not access

sockets - TCP_CORK 的影响

c++ - 多线程返回未处理的异常用于存储信息

java - Java 的 try-with-resources 是捕获错误还是捕获异常?