C#异常Retry通用类
//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通用类相关推荐
- 一劳永逸,iOS 网页视图控制器通用类封装
原文链接:http://www.jianshu.com/p/553424763585 随着 H5 的发展,在 iOS 开发中,网页视图的使用率逐渐提升,为了增加代码封装度.减轻开发负担,因此通常会对网 ...
- DbHelper数据库通用类使用方法
代码 //执行SQL语句 public static void ExecSqlCommand() { DbHelper db = new DbHelper(); DbCommand command = ...
- SQLHelper通用类执行一条返回结果集的SqlCommand命令 使用方法
SQLHelper.cs 通用类 /// /// 执行一条返回结果集的SqlCommand命令,通过专用的连接字符串. /// 使用参数数组提供参数 /// /// /// 使用示例: /// Sql ...
- C#检测电脑的一些设置通用类(经典推荐)
此类能检测出电脑的cpu序列号,获取网卡硬件地址,获取IP地址,获取硬盘ID,操作系统的登录用户名,PC类型,物理内存,就这些了,够用吧,谁在有能获取电脑别的信息的类,跟贴啊,欢迎大家分享,打造一个超 ...
- DataTable转ListModel通用类
/// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...
- C#.NET操作数据库通用类(MS SQL Server篇)
下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...
- C#.NET操作数据库通用类
下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...
- 《WebForm开发系列高级篇》Item2导出EXCEL通用类(GridView,DataList,Repeater,DetailView)
1.导出效果图: 2.C#导出EXCEL通用类源代码: using System; using System.Data; using System.Configuration; using Syste ...
- JavaSE(十)——set和map集合、异常、File类
文章目录 1.set集合 2. Map集合 2.1 Map概述 2.2 Map集合的基本功能 2.3 Map集合遍历 3.异常 3.1 异常的继承体系 3.2 异常处理的两种方式 3.3 异常注意事项 ...
最新文章
- rrdtool数据备份与迁移
- java ruby_Java,Ruby和Go,我的天哪!
- VISP视觉库识别AprilTag详细解读
- STL priority_queue sort 自定义比较终极模板
- SSH原理之图文详解
- 栈顶指针到底指向哪_被称为“程序员试金石”的指针真的没有那么难!不信的话你来看看
- Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析
- 初识生成器与生成器表达式 Day12
- html页面锁屏,锁屏页面.html
- 外架小横杆外露长度规范要求_电缆制作通用工艺规范
- Unity接入Steam成就
- 添加178源未能链接服务器,添加178源_在cydia中添加178源_178插件源-Guide信息网
- 前端新手小白,入职第一天,我都做了什么
- OpenCV开发笔记(六十七):红胖子8分钟带你深入了解特征点暴力匹配(图文并茂+浅显易懂+程序源码)
- C/C++语言100题练习计划 82——加勒比海盗船(贪心算法实现)
- ROS学习笔记(十)——ROS试用练习(一)
- 程序员必备免费电子书下载网站
- 电脑桌面便签怎么复制单条便签内容?
- 用数据解读《上海堡垒》| 鹿晗是不是糊了?
- //编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求
热门文章
- 微软在 Build 2020 上“展示”新版 Edge for Linux
- iframe 禁止打开新窗口_打开新窗口的安全和性能问题
- 拓扑一致体参数化的复杂模型的等几何分析计算重用
- 学术诚信的重要性_论文投稿触犯“忌讳”,选择“三缄其口”?学术道德底线不能丢...
- dmz区服务器系统激活,dmz主机搭建服务器
- android banner动画框架,Android Studio Banner轮播图使用
- python3.70 wxpy_python3.5中的wxpydeprectionwarning
- 计算机课奖金计算步骤,计算机二级excel真题:计算员工奖金
- 获取两个时间之间的间隔_花了两天,终于把 Python 的时间转化给整明白了(超多图解)...
- 学JAVA的诗句_学Java有感(终)