zoukankan      html  css  js  c++  java
  • 执行异常处理方法

    应用场景:

         网站代码中,网络延迟,数据处理出错。

         指定时间点,任务执行中出现异常错误。    

         ...

    异常处理通用方法:         

       /// <summary>
            /// 执行异常处理方法
            /// </summary>
            /// <typeparam name="P">参数类型</typeparam>
            /// <typeparam name="T">返回值类型</typeparam>
            /// <param name="Func">方法名</param>
            /// <param name="param">传入参数值</param>
            /// <returns>返回值</returns>
            static T Exec<P, T>(Func<P, T> Func, P param)
            {
                T t = default(T);
                bool isTrue = true;
                int count = 0;
                while (isTrue)
                {
                    if (count <= 3)
                    {
                        try
                        {
                            t = Func(param);
                            isTrue = false;
                        }
                        catch (Exception ex)
                        {
                            //Thread.Sleep(count * 3000);
                            isTrue = true;
                        }
                    }
                    else
                    {
                        isTrue = false;
                    }
                    count++;
                }
                return t;
            }

    示例方法:    

            static string GetInt(int param)
            {
                return param.ToString();
            }

    执行:
      

    string str = Exec<int, string>(GetInt, 123);
    Console.WriteLine(str);

     实际生产中 扩展应用:

            /// <summary>
            /// 执行方法
            /// </summary>
            /// <typeparam name="P">传入参数</typeparam>
            /// <typeparam name="V">返回类型</typeparam>
            /// <param name="Func">方法名称</param>
            /// <param name="param">参数值</param>
            /// <param name="execMaxCount">最大执行次数</param>
            /// <param name="isSleep">是否Sleep</param>
            /// <param name="logname">日志名称</param>
            /// <param name="currentDeveloper">开发者</param>
            /// <param name="level">日志级别</param>
            /// <returns>返回V类型</returns>
            public static V Exec<P,V>(Func<P,V> Func, P param, int execMaxCount, bool isSleep, string logname, Developer currentDeveloper, LogLevel level)
            {
                V res = default(V);
                bool isTrue = true;
                int count = 1;
                while (isTrue)
                {
                    if (count <= execMaxCount)
                    {
                        try
                        {
                            res = Func(param);
                            //WebLogUtils.LogWrite(logname, level, currentDeveloper, logname + " 执行成功。 执行参数:" + param + "当前执行次数:" + count);
                            isTrue = false;
                        }
                        catch (Exception ex)
                        {
                            //次数记录日志,自己定义要记入的内容
                            //WebLogUtils.LogWrite(logname, level, currentDeveloper, logname + " 执行失败。执行参数:" + param + "当前执行次数:" + count + "异常信息:" + ex.Message + "异常堆栈:" + ex.StackTrace);
                            if (isSleep)
                            {
                               System.Threading.Thread.Sleep(3000 * count);
                            }
                            isTrue = true;
                        }
                        count++;
                    }
                    else
                    {
                        isTrue = false;
                    }
                }
                return res;
            }

      

  • 相关阅读:
    iOS基础教程:在建好的项目中加入CoreData[转]
    iOS开发--使用lipo命令制作模拟器与真机通用静态库
    Linux命令之du
    简单了解gzip、bzip2、xz
    Linux命令之rpm
    进入CentOS7紧急模式恢复root密码
    解决Linux用户模板文件被删除后显示不正常问题
    Linux修改用户基本信息(不含密码)
    Linux用户密码文件/etc/shadow相关
    SecureCRT、Xmanager对Linux上传下载文件或文件夹
  • 原文地址:https://www.cnblogs.com/lztkdr/p/Exec.html
Copyright © 2011-2022 走看看