• C#异常处理经验(原则与方法)


    C#异常处理经验(原则与方法)

    本文是异常处理经验性的文章,其实跟C#关系也不大。比较适合刚刚熟悉异常语法,而缺乏实战的读者。当然,经验老练的读者也可指出不足、给予意见、补充说明,一起完善文章,分享更多知识与经验。
     
    1、什么时候该异常处理?
    1)代码最外层,如WinFrom,避免用户看到内部异常信息用户体验不好,或者造成程序崩溃。
    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)待补充

     
     
    标签: 异常处理
  • 相关阅读:
    mysql 字符串先按照长度排序再按照ASCII码排序
    JMeter 压力测试文档
    Linux C监听鼠标键盘操作
    ubuntu 笔记本触摸板失灵
    git commit之后,想撤销commit
    清空iptables防火墙
    在k8s中搭建sonarqube并集成到jenkins
    redis集群搭建
    四叶草防火墙内外网映射
    k8smaster节点更换ip
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3612378.html
Copyright © 2020-2023  润新知