C# - 异常后重复代码的简单方法?

Ant*_*Ant -1 c# exception-handling

在没有使用方法递归或goto语句的情况下发生异常后,有没有简单的方法在try/catch块中重复代码?我正在调用一个Web服务,然后使用Entity Framework将该数据推送到SQL数据库,如果第一个步骤在第一个步骤成功后失败,我宁愿采用更简单或更简洁的方式重新尝试该步骤而不是递归相同的方法(这两个步骤在不同的方法中用于此目的)或使用goto语句.

Nai*_*air 5

首先,如果你陷入catch障碍,那么最好做清理和记录,而不是用goto或者爬回来recursion.

现在回答你的问题;

保持你的两个步骤在一个Transaction块内,并按照尝试输入的方法,否则尝试执行一段代码,直到你成功或有限次数.

//Code outline only idea and not production quality code.

    var timesTried=0
    while(timesTried<5) //here I try trying to execute 5 times
    {
     using(var tran = new TransactionScope())
     {
        CallMethodA();
        CallMethodB();
        tran.Complete();
        timesTried=6
     }
      timesTried++;
    }
Run Code Online (Sandbox Code Playgroud)

  • 这没有捕获任何异常,即使它确实如此,它也会重复`CallMethodA()`.如果在第二个方法期间发生错误,则OP不希望重复第一个方法. (2认同)
  • 我没有将`TimesTried`设置为`6`,而是使用`break;`语句.为了清楚起见,我会使用`for`循环执行五次,初始化`var timesTried = 0`和增量`timesTried ++`可以移动到`for`.但这些都是简单的细节,当然. (2认同)