使用try和catch包装每个函数是不错的做法?
我正在使用c#构建服务器,并且我试图了解是否有一种方法可以使其更加健壮并且可以防止崩溃,使用try& catch语句将其中的每个函数包装起来。
这样做是否合理?
答案 0 :(得分:8)
使用try和catch包装每个函数是不错的做法?
绝对不是。这是一场灾难的处方 - 这意味着即使出现问题并且州处于腐败状态,您也可能会继续处理请求。
通常,您应该只有catch块,您可以实际处理异常并继续成功;否则,你应该让异常泡沫化。因此,您可能希望拥有catch
块以重试某些操作,但仅限于特定操作。
然后,您可以在顶层有一个catch
块,以阻止服务器本身崩溃。您还没有告诉我们您正在构建什么样的服务器 - 框架本身可能会提供这样的catch
块。
捕获异常的另一个原因是将其包装并重新抛出它作为更合适的隐藏实现细节,并可能添加更多上下文。坦率地说,这可能有点痛苦,并且仅在某些情况下有用。这实际上取决于抛出异常的代码,以及您期望如何处理它。
答案 1 :(得分:1)
两个具体而重要的注释:
模拟 - 始终使用try / catch / finally块:如果您使用模拟,则必须始终将代码包装在try / catch / finally块中,并将注销代码放在finally块中。原因是如果在模拟时抛出异常,并且异常“冒泡”,您仍将以模拟身份登录,这是一种安全风险。
循环 - 永远不要使用try / catch块:try / catch块很贵。如果你的应用程序碰到了一个路障,其中异常应该冒泡到顶部,那很好,但绝不要在循环中使用try / catch来迭代到下一个项目。一个示例可能是执行某些计算的循环,如果数据不好,则会得到除以0的错误。而不是执行计算然后捕获异常并继续循环,只需检查0并继续循环,以便永远不会抛出异常。
答案 2 :(得分:0)
我认为最好在try中包装函数组并捕获不同的异常并处理它们。它提供了具有相同功能的更具可读性和更小的代码