//Retry机制public static class Retry{/// <summary>/// 重试零个参数无返回值的方法/// </summary>/// <param name="action">执行方法方法</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>public static void Execute(Action action, TimeSpan retryInterval, int retryCount = 3){Execute<object>(() =>{action();return null;}, retryInterval, retryCount);}/// <summary>/// 重试一个参数无返回值的方法/// </summary>/// <typeparam name="T1">参数类型1</typeparam>/// <param name="action">执行方法方法</param>/// <param name="arg1">参数1</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>public static void Execute<T1>(Action<T1> action, T1 arg1, TimeSpan retryInterval, int retryCount = 3){Execute<T1, object>((x1) =>{action(arg1);return null;}, arg1, retryInterval, retryCount);}/// <summary>/// 重试两个参数无返回值的方法/// </summary>/// <typeparam name="T1">参数类型1</typeparam>/// <typeparam name="T2">参数类型2</typeparam>/// <param name="action">执行方法方法</param>/// <param name="arg1">参数1</param>/// <param name="arg2">参数2</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>public static void Execute<T1, T2>(Action<T1, T2> action, T1 arg1, T2 arg2, TimeSpan retryInterval, int retryCount = 3){Execute<T1, T2, object>((x1, x2) =>{action(arg1, arg2);return null;}, arg1, arg2, retryInterval, retryCount);}/// <summary>/// 重试三个参数无返回值的方法/// </summary>/// <typeparam name="T1">参数类型1</typeparam>/// <typeparam name="T2">参数类型2</typeparam>/// <typeparam name="T3">参数类型3</typeparam>/// <param name="action">执行方法方法</param>/// <param name="arg1">参数1</param>/// <param name="arg2">参数2</param>/// <param name="arg3">参数3</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>public static void Execute<T1, T2, T3>(Action<T1, T2, T3> action, T1 arg1, T2 arg2, T3 arg3, TimeSpan retryInterval, int retryCount = 3){Execute<T1, T2, T3, object>((x1, x2, x3) =>{action(arg1, arg2, arg3);return null;}, arg1, arg2, arg3, retryInterval, retryCount);}/// <summary>/// 重试四个参数无返回值的方法/// </summary>/// <typeparam name="T1">参数类型1</typeparam>/// <typeparam name="T2">参数类型2</typeparam>/// <typeparam name="T3">参数类型3</typeparam>/// <typeparam name="T4">参数类型4</typeparam>/// <param name="action">执行方法方法</param>/// <param name="arg1">参数1</param>/// <param name="arg2">参数2</param>/// <param name="arg3">参数3</param>/// <param name="arg4">参数4</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>public static void Execute<T1, T2, T3, T4>(Action<T1, T2, T3, T4> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, TimeSpan retryInterval, int retryCount = 3){Execute<T1, T2, T3, T4, object>((x1, x2, x3, x4) =>{action(arg1, arg2, arg3, arg4);return null;}, arg1, arg2, arg3, arg4, retryInterval, retryCount);}/// <summary>/// 重试零个参数带返回值/// </summary>/// <typeparam name="T">返回类型</typeparam>/// <param name="func">执行的方法</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>/// <returns>返回类型T</returns>public static T Execute<T>(Func<T> func, TimeSpan retryInterval, int retryCount = 3){var exceptions = new List<Exception>();for (int retry = 0; retry < retryCount; retry++){try{return func();}catch (Exception ex){exceptions.Add(ex);Thread.Sleep(retryInterval);}}throw new AggregateException(exceptions);}/// <summary>/// 重试一个参数带返回值/// </summary>/// <typeparam name="T1">参数类型1</typeparam>/// <typeparam name="T">返回类型</typeparam>/// <param name="func">执行的方法</param>/// <param name="arg1">参数1</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>/// <returns>返回类型T</returns>public static T Execute<T1, T>(Func<T1, T> func, T1 arg1, TimeSpan retryInterval, int retryCount = 3){var exceptions = new List<Exception>();for (int retry = 0; retry < retryCount; retry++){try{return func(arg1);}catch (Exception ex){exceptions.Add(ex);Thread.Sleep(retryInterval);}}throw new AggregateException(exceptions);}/// <summary>/// 重试两个参数带返回值/// </summary>/// <typeparam name="T1">参数类型1</typeparam>/// <typeparam name="T2">参数类型2</typeparam>/// <typeparam name="T">返回类型</typeparam>/// <param name="func">执行的方法</param>/// <param name="arg1">参数1</param>/// <param name="arg2">参数2</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>/// <returns>返回类型T</returns>public static T Execute<T1, T2, T>(Func<T1, T2, T> func, T1 arg1, T2 arg2, TimeSpan retryInterval, int retryCount = 3){var exceptions = new List<Exception>();for (int retry = 0; retry < retryCount; retry++){try{return func(arg1, arg2);}catch (Exception ex){exceptions.Add(ex);Thread.Sleep(retryInterval);}}throw new AggregateException(exceptions);}/// <summary>/// 重试三个参数带返回值/// </summary>/// <typeparam name="T1">参数类型1</typeparam>/// <typeparam name="T2">参数类型2</typeparam>/// <typeparam name="T3">参数类型3</typeparam>/// <typeparam name="T">返回类型</typeparam>/// <param name="func">执行的方法</param>/// <param name="arg1">参数1</param>/// <param name="arg2">参数2</param>/// <param name="arg3">参数3</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>/// <returns>返回类型T</returns>public static T Execute<T1, T2, T3, T>(Func<T1, T2, T3, T> func, T1 arg1, T2 arg2, T3 arg3, TimeSpan retryInterval, int retryCount = 3){var exceptions = new List<Exception>();for (int retry = 0; retry < retryCount; retry++){try{return func(arg1, arg2, arg3);}catch (Exception ex){exceptions.Add(ex);Thread.Sleep(retryInterval);}}throw new AggregateException(exceptions);}/// <summary>/// 重试四个参数带返回值/// </summary>/// <typeparam name="T1">参数类型1</typeparam>/// <typeparam name="T2">参数类型2</typeparam>/// <typeparam name="T3">参数类型3</typeparam>/// <typeparam name="T4">参数类型4</typeparam>/// <typeparam name="T">返回类型</typeparam>/// <param name="func">执行的方法</param>/// <param name="arg1">参数1</param>/// <param name="arg2">参数2</param>/// <param name="arg3">参数3</param>/// <param name="arg4">参数4</param>/// <param name="retryInterval">重试间隔</param>/// <param name="retryCount">重试次数</param>/// <returns>返回类型T</returns>public static T Execute<T1, T2, T3, T4, T>(Func<T1, T2, T3, T4, T> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4, TimeSpan retryInterval, int retryCount = 3){var exceptions = new List<Exception>();for (int retry = 0; retry < retryCount; retry++){try{return func(arg1, arg2, arg3, arg4);}catch (Exception ex){exceptions.Add(ex);Thread.Sleep(retryInterval);}}throw new AggregateException(exceptions);}}

转载于:https://www.cnblogs.com/123qq/p/9083182.html

C#异常Retry通用类相关推荐

  1. 一劳永逸,iOS 网页视图控制器通用类封装

    原文链接:http://www.jianshu.com/p/553424763585 随着 H5 的发展,在 iOS 开发中,网页视图的使用率逐渐提升,为了增加代码封装度.减轻开发负担,因此通常会对网 ...

  2. DbHelper数据库通用类使用方法

    代码 //执行SQL语句 public static void ExecSqlCommand() { DbHelper db = new DbHelper(); DbCommand command = ...

  3. SQLHelper通用类执行一条返回结果集的SqlCommand命令 使用方法

    SQLHelper.cs 通用类 /// /// 执行一条返回结果集的SqlCommand命令,通过专用的连接字符串. /// 使用参数数组提供参数 /// /// /// 使用示例: /// Sql ...

  4. C#检测电脑的一些设置通用类(经典推荐)

    此类能检测出电脑的cpu序列号,获取网卡硬件地址,获取IP地址,获取硬盘ID,操作系统的登录用户名,PC类型,物理内存,就这些了,够用吧,谁在有能获取电脑别的信息的类,跟贴啊,欢迎大家分享,打造一个超 ...

  5. DataTable转ListModel通用类

    /// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...

  6. C#.NET操作数据库通用类(MS SQL Server篇)

    下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...

  7. C#.NET操作数据库通用类

    下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...

  8. 《WebForm开发系列高级篇》Item2导出EXCEL通用类(GridView,DataList,Repeater,DetailView)

    1.导出效果图: 2.C#导出EXCEL通用类源代码: using System; using System.Data; using System.Configuration; using Syste ...

  9. JavaSE(十)——set和map集合、异常、File类

    文章目录 1.set集合 2. Map集合 2.1 Map概述 2.2 Map集合的基本功能 2.3 Map集合遍历 3.异常 3.1 异常的继承体系 3.2 异常处理的两种方式 3.3 异常注意事项 ...

最新文章

  1. rrdtool数据备份与迁移
  2. java ruby_Java,Ruby和Go,我的天哪!
  3. VISP视觉库识别AprilTag详细解读
  4. STL priority_queue sort 自定义比较终极模板
  5. SSH原理之图文详解
  6. 栈顶指针到底指向哪_被称为“程序员试金石”的指针真的没有那么难!不信的话你来看看
  7. Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析
  8. 初识生成器与生成器表达式 Day12
  9. html页面锁屏,锁屏页面.html
  10. 外架小横杆外露长度规范要求_电缆制作通用工艺规范
  11. Unity接入Steam成就
  12. 添加178源未能链接服务器,添加178源_在cydia中添加178源_178插件源-Guide信息网
  13. 前端新手小白,入职第一天,我都做了什么
  14. OpenCV开发笔记(六十七):红胖子8分钟带你深入了解特征点暴力匹配(图文并茂+浅显易懂+程序源码)
  15. C/C++语言100题练习计划 82——加勒比海盗船(贪心算法实现)
  16. ROS学习笔记(十)——ROS试用练习(一)
  17. 程序员必备免费电子书下载网站
  18. 电脑桌面便签怎么复制单条便签内容?
  19. 用数据解读《上海堡垒》| 鹿晗是不是糊了?
  20. //编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求

热门文章

  1. 微软在 Build 2020 上“展示”新版 Edge for Linux
  2. iframe 禁止打开新窗口_打开新窗口的安全和性能问题
  3. 拓扑一致体参数化的复杂模型的等几何分析计算重用
  4. 学术诚信的重要性_论文投稿触犯“忌讳”,选择“三缄其口”?学术道德底线不能丢...
  5. dmz区服务器系统激活,dmz主机搭建服务器
  6. android banner动画框架,Android Studio Banner轮播图使用
  7. python3.70 wxpy_python3.5中的wxpydeprectionwarning
  8. 计算机课奖金计算步骤,计算机二级excel真题:计算员工奖金
  9. 获取两个时间之间的间隔_花了两天,终于把 Python 的时间转化给整明白了(超多图解)...
  10. 学JAVA的诗句_学Java有感(终)