我有一个名为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);
}
}
看起来像是在浪费代码。想知道是否有更好的方法。
- 您可以将每个api调用封装在try-catch块上,并分别捕获每个调用的执行选项,以执行您想要的操作
- 您可以将每个api调用封装在separate方法上,以获得与上面相同的结果,但方式更具组织性
- 您可以尝试Polly扩展包来处理您配置的一些异常,并且仍然保持代码的原样