2

这是用 try 和 catch 包装每个函数的好习惯吗?

我正在用 c# 构建一个服务器,并且我试图了解使其更健壮并防止崩溃的方法之一是使用 try&catch 语句将每个函数包装在其中。

这是合理的做法吗??

4

3 回答 3

8

这是用 try 和 catch 包装每个函数的好习惯吗?

绝对不。这是灾难的根源——这意味着即使出现问题并且国家已经腐败,您也可能会尝试继续执行请求。

通常,您应该只使用可以实际处理异常并成功继续的 catch 块;否则,您应该让异常冒泡。因此,您可能需要一个catch块来重试某些操作,但仅限于特定操作。

然后,您可能会catch在顶层设置一个块,以阻止服务器本身崩溃。您还没有告诉我们您正在构建什么样的服务器 - 框架本身可能会提供这样的适当catch块。

捕获异常的另一个原因是将其包装并重新抛出,以隐藏实现细节,并可能添加更多上下文。坦率地说,这可能有点痛苦,并且仅在某些情况下有用。这实际上取决于抛出异常的代码,以及您期望如何处理它。

于 2012-03-03T14:13:46.110 回答
1

两个具体而重要的注意事项:

  1. 模拟 - 始终使用 try/catch/finally 块:如果您曾经使用模拟,则必须始终将代码包装在 try/catch/finally 块中,并将注销代码放在 finally 块中。原因是如果在模拟时抛出异常,并且异常“冒泡”,您仍然会以模拟身份登录,这是一个安全风险。

  2. 循环 - 永远不要使用 try/catch 块:try/catch 块很昂贵。如果您的应用程序遇到了异常应该冒泡到顶部的障碍,那很好,但不要在循环中使用 try/catch 来迭代下一个项目。一个例子可能是一个执行一些计算的循环,如果数据不好,你会得到一个除以 0 的错误。而不是执行计算然后捕获异常并继续循环,只需检查 0 并继续循环,这样就不会抛出异常。

于 2012-03-03T15:12:49.103 回答
0

我认为最好将一组函数包装在 try 中并捕获不同的异常并处理它们。它提供了具有相同功能的更易读和更小的代码

于 2012-03-03T14:11:57.650 回答