try catch语句的位置

fre*_*hie 8 c#

我有一些目前看起来像这样的代码:

public void MainFunction() 
{
   try
   {
      SomeProblemFunction();
   }
   catch
   {
      AllFineFunction();
   }
}

private void SomeProblemFunction() { ... }
private void AllFineFunction() { ... }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在将调用包装SomeProblemFunction在一个try语句周围,因为该函数可能会失败(它依赖于外部Web服务调用).

我的问题是:try声明应该是a)问题函数之外(比如我现在有)或b)问题函数内部?

谢谢.

Aar*_*mer 7

通常,您希望允许异常传播到应用程序边界.你只想做一些例外的事情之一:

  • 包裹它
  • 代替它
  • 让它传播

更新

从您的问题来看,您似乎正在为Web服务调用寻找容错解决方案.这是一个更复杂的问题,而不仅仅是"我在哪里试试看?" 您仍然可以将异常处理放在应用程序边界,但是您可以实现容错策略.这需要考虑很多因素,包括异步调用您的Web服务,重试尝试次数等.我建议您搜索Web服务容错.