利用Func封装“方法重试”功能

摘要:
利用Func封装“方法重试”功能忙余,写个利用Func封装方法重试的功能。该方法主要实现带有返回参数的方法实现多次重试,只要返回的结果不是所限定的返回值,则自动重试X次。
利用Func封装“方法重试”功能

  忙余,写个利用Func封装方法重试的功能。该方法主要实现带有返回参数的方法实现多次重试,只要返回的结果不是所限定的返回值,则自动重试X次。Talk is cheap. Show me the code.

/// <summary>
/// 执行重试方法
/// </summary>
/// <param name="func">要执行的方法.</param>
/// <param name="arg1">参数1.</param>
/// <returns> 返回bool类型,该返回类型可以自己改为T类型</returns>
 public static bool RetryFuncMain(Func<string, bool> func, string arg1)
        {
            bool retBool = false;
            for (int i = 0; i < 3; i++)
            {
                try
                {
                    retBool = (bool)func(arg1);
                    if (retBool)
                    {
                        break;
                    }
                }
                catch (Exception ex)
                {
                    Logger.Default.Error("RetryFuncMain出现错误:", ex);
                    Thread.Sleep(2000);
                }
            }

            return retBool;
        }
要执行的方法示例
private bool PostIdentificationMethod(string postData)
        {
            bool flag = false;
            try
            {
                using (WebClient client = new WebClient())
                {
                    string retString = Encoding.UTF8.GetString(client.DownloadData("http://www.baidu.com"));
                }
                flag = true;
            }
            catch (Exception ex)
            {
                // this.ShowLogs(null, "出现错误:" + ex.Message);
            }
            return flag;
        }
调用示例

单线程调用示例:

Func<string,bool> func = (a) => { return PostIdentificationMethod(a); };
RetryFuncMain(func,"发送的字符串");

多线程调用示例:

 Func<string, bool> func = (a) => { return PostIdentificationMethod(a); };
 string imgString = "{"OT":"Identification","SubjectName":"发送的字符串"}";
 Task T1 = new Task(() => RetryFuncMain(func, imgString));
 T1.Start();

免责声明:文章转载自《利用Func封装“方法重试”功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇《越狱》里玫瑰花的制作方法(超详细)c++中c_str()的用法详解(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Scala入门系列(十一):模式匹配

引言 模式匹配是Scala中非常有特色,非常强大的一种功能。 类似于Java中的switch case语法,但是模式匹配的功能要比它强大得多,switch只能对值进行匹配,但是Scala的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配、对Array和List的元素情况进行匹配、对case class进行匹配甚至对有值或没值(Option)进行匹配...

函数对象与仿函数(function object and functor)

part 1. 仿函数在STL组件中的关系   如下图:   # 仿函数配合算法完成不同的策略变化。   # 适配器套接仿函数。 part 2. 仿函数介绍   传递给算法的“函数型实参”不一定得是函数,可以是行为类似函数的对象。这种对象称为函数对象(function object),或称为仿函数(functor)。——《STL标准库(第2版)》 P23...

C#编程总结(十)字符转码

C#编程总结(十)字符转码 为了适应某种特殊需要,字符需要根据规则进行转码,便于传输、展现以及其他操作等。 看看下面的转码,就知道他的用处了。 1、字符串转码 根据原编码格式与目标编码格式,完成转换。不过可能出现乱码哦。上一章已经介绍过了。 代码: /// <summary> /// 字符串编码转换...

Java 关于中文乱码处理的经验总结【转载】

为什么说乱码是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!如果中国的程序员不会遇到乱码,那么只有使用汉语编程。汉语编程是怎么回事我也不大清楚,应该是前年吧,我一朋友给我介绍汉语编程,怎么不错不错?当时因为学习忙没去关注这个,等我闲了,那个朋友不弄这个,问他他也不说不大清楚,最后自己对这个学...

Lamda表达式

2020/02/01 【面试】请你说说Lamda表达式的优缺点。 考察点:Java基础 参考回答: 优点:1. 简洁。2. 非常容易并行计算。3. 可能代表未来的编程趋势。 缺点:1. 若不用并行计算,很多时候计算速度没有比传统的 for 循环快。(并行计算有时需要预热才显示出效率优势)2. 不容易调试。3. 若其他程序员没有学过 lambda 表达式,代...

SpringBoot Controller接收参数的几种常用方式

第一类:请求路径参数 1. @PathVariable 获取路径参数。即url/{id}这种形式。 2. @RequestParam 获取查询参数。即url?name=这种形式 例子 GEThttp://localhost:8080/demo/123?name=suki_rong对应的java代码 @GetMapping("/demo/{id}") pub...