文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>c# 中Exception 的重试机制

c# 中Exception 的重试机制

时间:2011-05-23  来源:留云

有时候我们在项目中碰到,比如这样那样的原因(网络或者是其他的原因)导致方法调用失败,大部分的方法是在触发一次方法调用,其实我们可以通过自定义Exception,然后提供调用的方法名称和参数等等,提供一种自动的重试多次的机制。

其实方法是很简单的,我们先自定义一个Exception

代码如下

public class RetryException : Exception { private int RetryTimes; private string MethodName; private object[] Values; private Type ClassType; public RetryException(int retryTimes, Type classType, string method, params object[] values) { RetryTimes = retryTimes; MethodName = method; Values = values; ClassType = classType; RetryMethod(); } public RetryException(string message, int retryTimes, Type classType, string method, params object[] values) : base(message) { RetryTimes = retryTimes; MethodName = method; ClassType = classType; Values = values; RetryMethod(); } public RetryException(string message, Exception innerException, int retryTimes, Type classType, string method, params object[] values) : base(message, innerException) { RetryTimes = retryTimes; MethodName = method; ClassType = classType; Values = values; RetryMethod(); } private void RetryMethod() { if (string.IsNullOrEmpty(MethodName)) throw new Exception("method 为空"); if (RetryTimes == 0) throw new Exception("重试次数为空"); if (ClassType == null) throw new Exception("ClassType为空"); object instance = Activator.CreateInstance(ClassType); MethodInfo Method = ClassType.GetMethod(MethodName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public); do { try { Method.Invoke(instance, Values); } catch (Exception ex) { if (RetryTimes > 1) { System.Threading.Thread.Sleep(1000); } else { throw ex; } } RetryTimes--; } while (RetryTimes > 0); } }

使用方法 我们先定义一个简单的方法如下

 public class service    {        public void GetName(string message,object obj)        {            if (message == "error")                throw new Exception(" message");                       }    }

调用的方法是

  service sv = new service();            object obj = new object();            try            {                sv.GetName("error",obj);            }            catch (Exception ex)            {               new RetryException(5, typeof(service), "GetName", new object[] {"error",obj});            }

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载