C#-try-and-catch语句使用

本文关键字:语句 C#-try-and-catch | 更新日期: 2023-09-27 18:26:46

用try-and-catch包装每个函数是个好做法吗?

我正在用c#构建一个服务器,我试图了解让它更健壮和防止崩溃的方法之一是否是用try&catch语句。

这样做合理吗??

C#-try-and-catch语句使用

用try-and-catch包装每个函数是一种好的做法吗?

绝对不是。这是一场灾难的处方——这意味着即使出现了问题,国家腐败,你也可能试图继续执行请求。

通常情况下,您应该只有catch块,在那里您可以实际处理异常并成功继续;否则,您应该让异常出现。因此,您可能需要一个catch块来重试某些操作,但只能重试特定的操作。

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

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

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

  1. 模拟-始终使用try/catch/finally块:如果您使用模拟,则必须始终将代码包装在try/catch/fnally块中,并将注销代码放在finally块中。原因是,如果在模拟时引发异常,并且异常"冒泡",则您仍将以模拟身份登录,这存在安全风险。

  2. 循环-永远不要使用try/catch块:try/catch区块非常昂贵。如果你的应用程序遇到了一个障碍,异常应该出现在顶部,这很好,但千万不要在循环中使用try/catch来迭代到下一个项目。一个例子可能是一个执行某些计算的循环,如果数据不正确,则会得到一个被0除的错误。与其执行计算,然后捕捉异常并继续循环,不如只检查0并继续循环以避免引发异常。

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