日期:2014-05-18  浏览次数:20840 次

【高手进】关于异常处理的讨论
关于异常处理有几个很困扰的问题,希望有人能指点下!

先谢谢了!



1. 关于异常处理有哪些经典的书籍呢? 可以推荐下,想仔细阅读下!



2. 假设系统类 httpwebrequest 的 create 方法会发生异常 exceptionA 和 exceptionB,甚至更多的不熟悉的异常名称!


  有什么办法可以知道,create方法下的所有系统异常名称??? (查看msdn的create方法看不到其可能会发生异常的名称)





3. 我系统中有个类 webrequest

  //简化版的
  class webrequest
  {
  字段,属性....

  public void get(url,x1,x2,x3,x4) //获取某网站html
  {
  try
  {
  此处启用1个线程去 获取指定网址的部分内容!!

  }
  catch(xx)
  {
  超时或者网络断掉了
  }
  }
  }



   
  现在假设有100个webrequest的实例 同时访问自己的url。
  可是,按照上方设计的类 如果一个实例出现断网异常,就提醒1次; 那100个线程岂不是 提100次??


  有什么更好的办法 ,当多个线程发现断网的时候,只提示1次 断网错误?

   



------解决方案--------------------
1,异常处理说的比较好的个人认为:Windows核心编程,CLR via C#
2,了解一下Create是有什么活动可能产生什么异常,程序编写者要预先知道代码可能的异常,无法捕获的异常需要以日志形式输出和记录;
3,webrequest (题外话:同一个网址是很难一次请求100个,服务端会配置或者本机默认是2个并发请求,否则直接阻塞)因为请求出现的异常是有先后顺序的,异常是要处理的,不处理的异常会导致程序出现不可预料的错误,你应该throw该异常使程序退出,或者在你可以预知的情况下直接“内部消化”;
------解决方案--------------------
探讨

100个线程产生100个WebRequest,如果网络出现问题则出现100个Exception,合理
另外可以通过MSDN多查看会抛出exception的情况,包括remark
推荐你篇文章
Exception Handling Best Practices in .NET

------解决方案--------------------
呵呵,捕捉异常只是入门啦
难在设计异常
建议看看java,这点java设计时就做进去了
------解决方案--------------------
关于2,的确只能看文档。

实际上,异常处理本身很简单(我说一般开发者使用它),不需要一本书来介绍。而且某个特定异常的规定,是这个类的编写者规定的,所以也没有通用的大全的书籍来规定,应该看对应的文档。如同没有一本书是讲解变量怎么命名的一样。

丢出异常,在Java里面是显式用 throws 指定的,目前C#没有类似的语法。也不能说这是C#的缺陷,因为在实际开发中,异常类型的处理有时候过于繁琐,让程序员选择处理,把自幼交给开发者也不失一种选择。