在C#中实现单步重试逻辑的好建议

  • 本文关键字:重试 实现 单步 c# .net
  • 更新时间 :
  • 英文 :


我有一个名为Foo()的方法,它的实现中有几个API调用:

Foo(){
string resA, resB, resC;
try{
resA= APICall_A();
resB= APICall_B();
resC = APICall_C();
someOperation(resB);
}
// Catches any exception thrown by any API Call
catch(Exception ex){
throw new Exception("API Call failed", ex)
}
}

只有在Exception.HResult = 0x8007001F处抛出异常的情况下,我才能在APICall_B()上实现干净的重试逻辑?将捕获块更改为类似的内容

catch(Exception ex){
if(ex.HResult == 0x8007001F){
resB = APICall_B();
resC = APICall_C();
someOperation(resB);
}
else{
throw new Exception("API Call failed", ex);
}
}

看起来像是在浪费代码。想知道是否有更好的方法。

  1. 您可以将每个api调用封装在try-catch块上,并分别捕获每个调用的执行选项,以执行您想要的操作
  2. 您可以将每个api调用封装在separate方法上,以获得与上面相同的结果,但方式更具组织性
  3. 您可以尝试Polly扩展包来处理您配置的一些异常,并且仍然保持代码的原样

最新更新