【高手进】关于异常处理的讨论
关于异常处理有几个很困扰的问题,希望有人能指点下!
先谢谢了!
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该异常使程序退出,或者在你可以预知的情况下直接“内部消化”;
------解决方案--------------------
------解决方案--------------------呵呵,捕捉异常只是入门啦
难在设计异常
建议看看java,这点java设计时就做进去了
------解决方案--------------------关于2,的确只能看文档。
实际上,异常处理本身很简单(我说一般开发者使用它),不需要一本书来介绍。而且某个特定异常的规定,是这个类的编写者规定的,所以也没有通用的大全的书籍来规定,应该看对应的文档。如同没有一本书是讲解变量怎么命名的一样。
丢出异常,在Java里面是显式用 throws 指定的,目前C#没有类似的语法。也不能说这是C#的缺陷,因为在实际开发中,异常类型的处理有时候过于繁琐,让程序员选择处理,把自幼交给开发者也不失一种选择。