C# 有try-catch ,但是没有retry 功能,通过用有限次循环的办法来模拟Retry,当然中间需要加一个等待的过程。

我们可以利用C#的匿名方法(anonymous methods)匿名委托(anonymous delegate)修饰此功能

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; namespace Exchange.Common
{
public class ActionExecutor
{
/// <summary>
///
/// </summary>
/// <typeparam name="T1"></typeparam>
/// <param name="action"></param>
/// <param name="arg1"></param>
/// <param name="customerName"></param>
/// <param name="actionName"></param>
/// <param name="poNumber"></param>
/// <param name="retryCount"></param>
public static void Excute<T1>(Action<T1> action, T1 arg1, string customerName, string actionName, string poNumber, int retryCount = )
{
Excute<T1>(action, arg1, customerName, actionName, poNumber, new TimeSpan(, , ));
}
/// <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 void Excute<T1>(Action<T1> action, T1 arg1,string customerName,string actionName, string poNumber, TimeSpan retryInterval, int retryCount = )
{
//var exceptions = new List<Exception>(); for (int retry = ; retry < retryCount; retry++)
{
try
{
action(arg1);
return;
}
catch (Exception ex)
{
ExceptionHandler.Do(string.Format("{0} {1} \"{2}\" error", customerName, actionName, poNumber, retry), ex);
//exceptions.Add(ex);
Thread.Sleep(retryInterval);
}
}
}
}
}

在其他类中调用

ActionExecutor.Excute(RequesetOrder, order,
CUSTOMER_NAME,
"request order detail", order.OrderNumber); //RequesetOrder 类方法
//order 是RequesetOrder的参数

最新文章

  1. json的场景应用与实战
  2. 【C#进阶系列】22 CLR寄宿和AppDomain
  3. winform对话框控件、打印控件
  4. 【资源】NOIP2013测试数据senior/junior 普及/提高 数据
  5. 作业八:团队项目——Alpha阶段项目总结
  6. 学习hamcrest和mockito时的总结和demo
  7. mac上的键盘生活——输入法键位设置小技巧以及去掉自带输入法
  8. 【转】教你爱上Blocks(闭包)
  9. android-继承BaseAdapter--自定义适配器,getView执行多次的解决方法
  10. (转)Java字符串应用之密码加密与验证
  11. KafkaManager中Group下不显示对应Topic的解决方案
  12. Java学习笔记6---字符串比较方法compareTo(String str)
  13. fiddler启用过滤规则只显示想要的接口数据
  14. 云栖大会day1 下午
  15. JasperReport子报表参数传递
  16. golang byte与rune区别
  17. Python学习(七) —— 装饰器、迭代器、生成器
  18. python算法双指针问题:使用列表和数组模拟单链表
  19. 关于Spring中,定时任务执行两次的解决办法
  20. Python中级 —— 05访问数据库

热门文章

  1. 2011-12-14 调用cmd并获得输入输出+网络访问
  2. hibernate Annotation 以及注解版的数据关联
  3. resin容器更改JDK
  4. android文件缓存管理
  5. Contentprovider的创建和使用流程概述
  6. 关于TortoiseGit设置代理服务器会自动取消的问题解决方法
  7. day70-oracle 12-触发器
  8. MVC分层思想、SSM编程架构
  9. 算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-006BitonicMax
  10. Luogu 2375 [NOI2014]动物园