封装一个错误重试类

/// <summary>

/// 错误重试处理

/// </summary>

public static class RetryHandle

{

/// <summary>

/// 重试

/// </summary>

/// <param name="count">重试次数</param>

/// <param name="actionFunc">执行方法</param>

public static T Retry<T>(int count, Func<int,RetryMessage<T>> actionFunc = null)

{

if (actionFunc == null) return default(T);

var times = 1;

RetryMessage<T> ret;

do

{

ret = actionFunc(times);

if (ret.Success) break;

times++;

} while (times <= count);

return ret.Data;

}

/// <summary>

/// 隔一段时间重试调用一次

/// </summary>

/// <param name="sleepDurations"></param>

/// <param name="action"></param>

public static void WaitAndRetry(IEnumerable<TimeSpan> sleepDurations, Action<TimeSpan, int> action)

{

var intento = 1;

sleepDurations.Each(timeSpan =>

{

System.Threading.Thread.Sleep(timeSpan.Seconds * 1000);

action(timeSpan, intento);

intento++;

});

}

}

/// <summary>

///

/// </summary>

public class RetryMessage<T>

{

/// <summary>

///

/// </summary>

public bool Success { set; get; }

/// <summary>

///

/// </summary>

public T Data { set; get; }

}

//调用示例

var ret = RetryHandle.Retry(3, () =>

{

var list = GetList();

return new RetryMessage<List<HO_PESbkv>>

{

Success = list != null && list.Any(),

Data = list

};

});

时间: 2024-10-10 09:24:58

封装一个错误重试类的相关文章

block传值以及利用block封装一个网络请求类

1.block在俩个UIViewController间传值 最近刚学了几招block 的高级用法,其实就是利用block语法在俩个UIViewController之间传值,在这里分享给初学者,同时也方便我自己理解.我们知道UINavigationController类管理UIViewController的时候,利用的是"栈"的思想,在这里不做过多解释,切入正题,假设我们现在有俩个UIViewController,viewC1和viewC2,viewC1比viewC2先进入到UINavi

Direct-X学习笔记--封装一个网格模型类

之前学习了网格模型的导入,绘制,了解了X文件等相关知识,但是,那样绘制比较麻烦,而且绘制一个模型需要好多代码,完全是面向过程的思维,这次,学习一下怎么把网格模型的导入以及绘制等功能封装在一个类中.顺便加深一下对World Transform的理解.感觉自己的3D思维还是没有培养起来,想绘制一个对象,绘制出来和想象中的位置相差甚远. 一.复习一下网格模型相关知识 网格模型就是一个我们在美术工具中制作好的资源,通过一些API接口我们可以将美术童鞋做好的模型很方便的导入程序中.我们只需要了解怎样从文件

PHP封装一个上传类

<?php //print_r($_FILES['pic']); //print_r($_SERVER); header("Content-type:text/html; charset=utf-8"); date_default_timezone_set("PRC"); define("ROOT",$_SERVER['DOCUMENT_ROOT']); class Upload{ protected $allowExt=array('jp

C++ 封装一个经纬度的类

需求:根据经纬度获取两点之间的表面距离,以及计算两点之间的方向 参考: Android获取经纬度.计算距离.方位角 帖子里有讲公式,我就不重复了.这里没有写方位角的函数,因为暂时没用到其实很简单. 计算地球两个经纬度之间的距离和方向,这里计算的方向区分的更加具体 以后会不断地重构这个类. /* * JWD.h * * Created on: 2014年8月22日 * Author: zy */ #ifndef JWD_H_ #define JWD_H_ #include<math.h> cla

爬取当当网的图书信息之封装一个工具类

把这个类名取为Tool 封装一个下载网页的方法GetHtml public static string GetHtml(string url) { try { WebClient wb = new WebClient(); return wb.DownloadString(url); } catch { return ""; } } 传入的是这个网页的URL,这个方法能帮我们把网页下载下来封装一个匹配图书类URL的的方法 public static ArrayList GetList(

Python+Selenium进阶版(八)- Python自定义封装一个简单的Log类

目标:如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里. 练习场景: 我们需要封装一个简单的日志类,主要有以下内容: 1.生成的日志文件格式是 年月日分秒.log 2.生成的XXX.log文件存储在项目根目录下Logs文件夹下 3.这个日志类,支持INFO,ERROR两种日志级别 4.日志里,每行日志输出,时间日期+执行类名称+日志级别+日志描述 解决思路: 1.在根目录下新建一个Logs的文件夹,获取这个Log的相对路径: 2.日志的保存命名,需要系统时间:

[php] 错误接管类

自己弄的一个错误接管类: <?php //---------------------------------- // Leephp 错误接管类 // 2017-07-06 // PengchongLee //---------------------------------- // error_reporting - 设置应该报告何种 PHP 错误 error_reporting(0); class Erro { public function __construct() { $this->i

封装一个类搞定90%安卓客户端与服务器端交互

本实例封装了一个处理安卓客户端与服务器端交互的几个方法,对于中文乱码问题本实例也找到了解决方案.本例可以处理的场景如下: 1.与服务器端交互json数据. 2.Get方式与服务器端交互数据. 3.Post方式与服务器端交互数据. 4.HttpClient方式与服务器端交互数据. 5.上传文件到服务器端. 6.从服务器端下载文件. 7.从服务器端读取文本文件. 实例截图: 本篇文章将实例代码完整贴出,希望以本文作为一个交流的平台,大家集思广益封装出更好的处理类.交流地址: http://blog.

1.使用C++封装一个链表类LinkList

 使用C++封装一个链表类LinkList.写出相应一个测试用例 链表需要提供 添加 修改删除 除重 合并 排序创建 销毁等接口. 不能调用库函数或者使用STL等类库 题目延伸***********逆置链表********** LinkNode.h #ifndef LINKNODE_H #define LINKNODE_H #include <iostream> class LinkNode { public: int m_idata; LinkNode* m_pnext; }; #end