【问题标题】:Exception Handling on methods C#C#方法的异常处理
【发布时间】:2014-11-14 07:46:30
【问题描述】:

假设我有以下代码...

try
{
    await Task.Run(() => autobuyandsell.Discard_Players(client, this));
    if (stop == false)
    {
          await Task.Run(() => autobuyandsell.Buy_300_Players(client, this));
    }
}
catch (ExpiredSessionException ex) 
{
    relogin = true;
    b_stop.PerformClick();
 }

在 autobuyandsell 内部,当我调用一些可以抛出该异常的方法时,可能会发生 ExpiredSessionException。我的问题是,我需要在函数内部添加另一个 try/catch 块还是足以处理 extern Exception?

已接受答案:

由于我的程序唯一需要的是退出方法并重新启动一些变量,最终我决定在方法之外使用try/catch。

【问题讨论】:

  • 好吧,这完全取决于如果抛出异常,您希望发生什么。您是否希望您的(非常规命名,顺便说一句)Discard_Players 和 Buy_300_Players 方法在异常发生后继续?如果是这样,您需要在这些方法中捕获异常。否则,您可以在调用代码中捕获它们。
  • 我为我的命名错误道歉。我是这个领域的新手,所以我会从一开始就努力养成好习惯。回到我的问题,我想要的是在收到异常后退出该方法,所以我想我必须只将异常留在方法之外。
  • 如果您希望这个try-catch 处理异常,则不需要内部try-catch 块。这样就可以了。

标签: c# exception try-catch


【解决方案1】:

您会像刚才一样捕获它们,但您不会“知道”您的 Discard_Players 或 buy_300_Players 代码是否/执行了多少,以及何时发生异常等,这可能是一个坏主意。

例如,如果这些方法将状态持久化到磁盘/数据库,您将不会“知道”这是否发生。

(我一直在“know”中使用引号,因为我想在捕获异常时可能会询问调用堆栈等以找出引发异常的位置以便找出这些东西,但这会变得一团糟很快!)

如果您在方法内部捕获它们,您可以控制它们的处理方式(例如,可能在再次抛出之前撤消您保留的任何数据,以便您可以重新开始)更好。

因此,根据这两个函数的功能,您应该决定哪种方法最适合您的应用程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2015-05-21
    • 2018-08-19
    相关资源
    最近更新 更多