zoukankan      html  css  js  c++  java
  • C#异常处理经验(原则与方法)

         本文是异常处理经验性的文章,其实跟C#关系也不大。比较适合刚刚熟悉异常语法,而缺乏实战的读者。当然,经验老练的读者也可指出不足、给予意见、补充说明,一起完善文章,分享更多知识与经验。
     
    1、什么时候该异常处理?
    1)代码最外层,如WinFrom,避免用户看到内部异常信息用户体验不好,或者造成程序崩溃,可以用log4net之类的框架记录异常。
    2)遇到异常需要恢复状态或者重试的地方。例如连接数据库偶然失败了,可以有个重连机制,在Catch块重新连接数据库。
    3)对于一系列有可能失败的任务,其中有一个任务失败,不想影响到其他任务。例如要上传100张图片,不想因为一张图片上传发生异常而失败,进而终止整个上传任务,仅需要记录下失败的图片,提醒用户重传即可。
     
    2、异常处理需要注意的地方
    1)Catch和Finally代码应该非常短,而且成功率极高,避免自己又抛出一个异常。否则CLR会终止进程,避免安全漏洞或者不可预知的后果。这个类似于Windows蓝屏,发生了严重的错误,宁愿使系统不可用。
    2)Catch块尽量避免直接捕捉异常的基类Exception,而应该捕捉具体的异常类。
     
    3、异常处理的方法和技巧
    1)是否能构建统一的框架处理异常,而不用手工来处理呢?
         有的人可能会问,能不能偷懒,在一个地方处理异常就行了。如果仅仅是记录异常系统信息,通知到用户,而且这些信息通常是可以缺少一些上下文的,是可以构建同一的机制记录异常信息的。
    例如:
    WinFrom的Application对象本身就提供了ThreadException时间来捕捉为处理的异常
      static void Main()
            {
                //注册捕捉异常事件
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
                Exception ex = e.Exception;
                //做一些极其简单的记录异常信息操作
            }
    又例如:
    WebFrom的Global.asax本身就已经定义了void Application_Error(object sender, EventArgs e) 来处理异常
         void Application_Error(object sender, EventArgs e)
            {
                // 在出现未处理的错误时运行的代码
                Exception ex = Server.GetLastError();
                //处理完异常后清除异常
                Server.ClearError();
            }

         但是很多时候,异常处理,不仅仅只是记录到了错误信息就可以了,有时候是需要失败重试或者清理资源等等,因此,仅仅靠统一构建异常处理框架是不够灵活的,

    因此可以一方面统一处理,另外一方面特殊的地方可以另外处理。

    2)待补充

  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/still-windows7/p/experienceofexception.html
Copyright © 2011-2022 走看看