2009-04-29 29 views
1

我在我的一个类中有以下代码。这个类的目的是为了从Web服务器获得平衡。以防万一出现了平衡问题。我会处理一个例外。但是,这一切都很容易。但是我仍然想知道我的声明中会回复什么。C#从异常句柄返回一些东西

大部分我看着例子只是写来使用控制台:

Console.WriteLine(ex.Message); 

这是所有非常好。但是在实际应用中,大多数开发人员做什么?

//Download only when the webclient is not busy. 
     if (!wc.IsBusy) 
     { 
      // Sleep for 1/2 second to give the server time to update the balance. 
      System.Threading.Thread.Sleep(500); 

      try 
      { 
       // Download the current balance. 
       wc.DownloadStringAsync(new Uri(strURL)); 
      } 
      catch (WebException ex) 
      { 
       Console.Write("GetBalance(): " + ex.Message); 
      } 
     } 
     else 
     { 
      Console.Write("Busy please try again"); 
     } 

我的函数此刻返回void。我只是想知道如果Web客户端忙碌,我还会返回什么?

非常感谢任何建议,

回答

14

如果你不能处理它,不要捕捉异常。如果您仅返回某个值,则调用方法必须检查该值是实际结果还是仅指示异常。现在这个方法必须决定要做什么并返回。并调用此方法的方法。和方法...

所以,只要让异常向上冒泡堆栈,并抓住它的地方,你可以处理它。也许直接在用户界面下面,然后显示一个消息框,询问用户是否想要重试或显示信息如何解决问题。如果您没有用户界面,请将其放在可以解决问题并重试的地方。如果这是一个暂时的问题,请在合理的水平重试整个任务,直到通话成功。

如果您想记录某些内容,请使用以下模式记录重新抛出它的异常。

try 
{ 
    DoStuff(); 
} 
catch (Exception exception) 
{ 
    Log(exception.ToString()); 

    throw; 
} 

请注意,这是throw;而不是throw exception;。如果你在后面做,你会失去原始的堆栈跟踪。如果您可以推断有关异常原因的更多详细信息,则应该使用附加信息将捕获到的异常包装为更有意义的异常。

try 
{ 
    DoStuff(); 
} 
catch (SpecificMeaninglessException exception) 
{ 
    Log(exception.ToString()); 

    throw new MeaningfulException("Details about the error.", exception); 
} 
catch (Exception exception) 
{ 
    Log(exception.ToString()); 

    throw; 
} 
1

如果客户是繁忙,但等待重试前的某个时间你可以重新运行的方法? x重试后可能会失败。

如果您希望继续前进并简单地记录问题,则您的catch语句可以将异常记录到基于文件的日志,事件查看器,提交到数据库,引发警报(电子邮件,短信等)if有必要。

+0

如果每个方法都实现了延迟 - 重试循环,则将它们嵌套三个深度,并且您已经尝试了重试的次数。这样做很危险。 – 2009-04-29 02:25:55

3

您应该使用ex.ToString()方法

Exception.Message 包含异常的简单描述(例如 “对象未设置...”)。

Exception.ToString() 包含对异常的描述以及完整的堆栈跟踪。

Exception Handling Best Practices in .NET

1

如果你只在观看你应该重新例外抛出异常所以谁的一次是在处理它仍然会得到它计划感兴趣。

1

你当然不想掩盖未处理的异常。让它通过堆栈起泡。但是如果你在网络客户端忙时要求返回什么, 如果返回一个随机时间间隔或函数调用者在尝试再次下载余额之前应该等待的一些有意义的时间间隔?随机数可以分配负载或以其他方式缓解碰撞问题。根据服务器的当前状态可以发回更有意义的时间间隔。

相关问题