C# Retry库

比如网络访问或硬件参数设置需要重试,可引用gunet上的Polly库。

同步方式(每次重试有不同的时间间隔)

cs 复制代码
            var polly = Policy.Handle<Exception>().WaitAndRetry(new[] { new TimeSpan(0, 0, 1), new TimeSpan(0, 0, 2), new TimeSpan(0, 0, 3) }, (ex, t, retryCnt, context) => {
                Debug.WriteLine($"{ex.Message}, {t}, {retryCnt}");
            });
            polly.ExecuteAndCapture(() => {
                Thread.Sleep(1000);
                var random = new Random();
                var v = random.Next(0, 10);
                if (v < 50)
                    throw new Exception("V < 50");
                Debug.WriteLine($"polly.ExecuteAndCapture {Thread.CurrentThread.ManagedThreadId}");
            });

异步方式(每次重试有不同的时间间隔)

cs 复制代码
            var polly = Policy.Handle<Exception>().WaitAndRetryAsync(new[] { new TimeSpan(0, 0, 1), new TimeSpan(0, 0, 5), new TimeSpan(0, 0, 10) }, (ex, t, retryCnt, context) => {
                Debug.WriteLine($"{ex.Message}, {t}, {retryCnt}  ThreadID={Thread.CurrentThread.ManagedThreadId}");
            });
            polly.ExecuteAndCaptureAsync(async () => {
                await Task.Run(() => {
                    Thread.Sleep(1000);
                    var random = new Random();
                    var v = random.Next(0, 10);
                    if (v < 50)
                        throw new Exception("V < 50");
                    Debug.WriteLine($"polly.ExecuteAndCapture {Thread.CurrentThread.ManagedThreadId}");
                });
            });
相关推荐
P***8439几秒前
【MySQL】C# 连接MySQL
数据库·mysql·c#
8***f395几秒前
SQL中的REGEXP正则表达式使用指南
数据库·sql·正则表达式
o***74175 分钟前
MySQL root用户密码忘记怎么办(Reset root account password)
数据库·mysql·adb
M***Z2106 分钟前
【SQL技术】不同数据库引擎 SQL 优化方案剖析
数据库·sql
l***217825 分钟前
MySQL--》理解锁机制中的并发控制与优化策略
数据库·mysql·oracle
chenyuhao202428 分钟前
MySQL索引特性
开发语言·数据库·c++·后端·mysql
JamesGosling66630 分钟前
深入理解内容安全策略(CSP):原理、作用与实践指南
前端·浏览器
2***s67231 分钟前
【Go】Go语言基础学习(Go安装配置、基础语法)
服务器·学习·golang
不要想太多31 分钟前
前端进阶系列之《浏览器渲染原理》
前端
七喜小伙儿42 分钟前
第2节:趣谈FreeRTOS--打工人的日常
前端