Stackoverflow 珠玑:C#封装重试指定次数的功能
最近写的一个 .NET Core 爬虫里用到了需要多次重试的功能,本着无脑输出的精神,google 了一下,还真给我找到了:
    public static T Retry<T, TException>(int timesToRetry, Func<int, T> thingToTry) where TException : Exception {
            // Start at 1 instead of 0 to allow for final attempt
            int i;
            for (i = 1; i < timesToRetry; i++) {
                try {
                    return thingToTry(i);
                }
                catch (TException) {
                    // Maybe: Trace.WriteLine("Failed attempt...");
                }
            }
            return thingToTry(i); // Final attempt, let exception bubble up
        }
     //这里我增加了个异步版本
        public static async Task<T> RetryAsync<T, TException>(int timesToRetry, Func<int, Task<T>> thingToTry) where TException : Exception {
            // Start at 1 instead of 0 to allow for final attempt
            int i;
            for (i = 1; i < timesToRetry; i++) {
                try {
                    return await thingToTry(i);
                }
                catch (TException) {
                    // Maybe: Trace.WriteLine("Failed attempt...");
                }
            }
            return await thingToTry(i); // Final attempt, let exception bubble up
        }
用法就很简单了:
using static AStaticClass;
class A {
    void B() {
        //重试 3 次
        var result = Retry<int, Exception>(3, nTimes => {
            //这里做需要重试的事情
            Console.WriteLine($"第 {nTimes} 次尝试");
            return 99999;
        });
    }
}
可惜当时看到的时候顺手关了浏览器,找不到原始出处了,等我找回来补上。
Stackoverflow 珠玑:C#封装重试指定次数的功能的更多相关文章
- MyBatis Plus 将查询结果封装到指定实体
		
MyBatis Plus 将查询结果封装到指定实体 思路 自定义方法,使用Wrapper,自定义映射结果集 Mapper接口 package com.mozq.boot.mpsand01.dao; i ...
 - 使用jdbc将mysql数据库中的内容封装为指定对象的list集合
		
使用jdbc将mysql数据库中的内容封装为指定对象的list集合 public List<User> findAll() { private JdbcTemplate template ...
 - matlab中for 用来重复指定次数的 for 循环
		
参考:https://ww2.mathworks.cn/help/matlab/ref/for.html?searchHighlight=for&s_tid=doc_srchtitle for ...
 - 使用 EPPlus 封装的 excel 表格导入功能 (.net core c#)
		
使用 EPPlus 封装的 excel 表格导入功能 前言 最近做系统的时候有很多 excel导入 的功能,以前我前后端都做的时候是在前端解析,然后再做个批量插入的接口 我觉着这样挺好的,后端部分可以 ...
 - 使用 EPPlus 封装的 excel 表格导入功能 (二) delegate 委托 --永远滴神
		
使用 EPPlus 封装的 excel 表格导入功能 (二) delegate 委托 --永远滴神 前言 接上一篇 使用 EPPlus 封装的 excel 表格导入功能 (一) 前一篇的是大概能用但是 ...
 - web页面实现指定区域打印功能
		
web页面实现指定区域打印功能 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 详细如下: <style media=print type="t ...
 - MySQL实现排名并查询指定用户排名功能,并列排名功能
		
MySQL实现排名并查询指定用户排名功能,并列排名功能 表结构: CREATE TABLE test.testsort ( id int(11) NOT NULL AUTO_INCREMENT, ui ...
 - 封装ShareSDK中的分享功能封以及对类似第三方功能封装的心得【原创】
		
本篇的主题有三个: 1.封装思想的介绍 2.我的封装代码 3.我在封装sharesdk(采用的是简洁版本)分享功能是碰到的问题,以及解决方法. PS:其实这个我之前封装过一次,不过最近在重构项目时发现 ...
 - 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile
		
通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...
 
随机推荐
- 读取.Properties文件以及Spring注解读取文件内容
			
public class Main { public static void main(String[] args) throws IOException { //创建Properties对象 Pro ...
 - 卖给高通之后的CSR的现状和未来
			
转眼之间,CSR已经嫁给高通两年了,养在深宫大院大小妾的CSR,到底过的怎么样呢? 从高通官网上查看的结果显示,CSR产品被分成了三类: A 传统的用在耳机音响的CSR86XX系列,这部分改动不大,就 ...
 - javaweb目录结构简介
			
以上图说明: bbs目录代表一个web应用 bbs目录下的html,jsp文件可以直接被浏览器访问 WEB-INF目录下的资源是不能直接被浏览器访问的 web.xml文件是web程序的主要配置文件 所 ...
 - Xamarin.Android 调用手机拍照功能
			
最近开发Android遇到了调用本地拍照功能,于是在网上搜了一些方法,加上自己理解的注释,在这儿记录下来省的下次用时候找不到,同事也给正在寻找调用本地拍照功能的小伙伴一些帮助~ 实现思路:首先加载-- ...
 - 关于vue项目中,手动定义的scrollTop的值
			
在项目中,有时需要控制scrollTop的值,比如有一个列表页,点击任意一个列表可以进入其详情页,这时如果你要返回的话, 肯定是希望还回到刚刚点击的地方,我当时的解决办法是,本地存下点击那一刻的scr ...
 - Eclipse开发环境debug模式调试断点从jar跳到源码
			
Eclipse开发环境debug模式调试断点从jar跳到源码 说明:本案例使用jsch-0.1.54.jar和源码做test,项目分成两个,一个是jsch的源码,另一个是测试案例 一.下载JSch.的 ...
 - Migrate from ASP.NET Core 2.0 to 2.1
			
http://www.talkingdotnet.com/migrate-existing-aspnet-core-2-application-aspnet-core-2-1/ https://doc ...
 - mysql 开发进阶篇系列 27 数据库字符集设置
			
在安装完数据库后,使用汉字插入到表中,会报错,需要修改字符集类型,如下图所示: -- 插入汉字时报错 INSERT INTO User2 VALUES('张三') -- 查看字符集 SHOW VARI ...
 - 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
			
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...
 - SQL 必知必会·笔记<15>创建和操纵表
			
创建表的两种办法: 使用DBMS 提供的交互式创建和管理数据库表的工具: 直接用SQL 语句创建. 表创建基础 创建表示例: CREATE TABLE Products ( prod_id ) NOT ...