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}");
                });
            });
相关推荐
while(1){yan}8 分钟前
MyBatis Generator
数据库·spring boot·java-ee·mybatis
それども17 分钟前
MySQL affectedRows 计算逻辑
数据库·mysql
是小章啊25 分钟前
MySQL 之SQL 执行规则及索引详解
数据库·sql·mysql
李剑一40 分钟前
uni-app实现本地MQTT连接
前端·trae
EndingCoder43 分钟前
Any、Unknown 和 Void:特殊类型的用法
前端·javascript·typescript
oden44 分钟前
代码高亮、数学公式、流程图... Astro 博客进阶全指南
前端
富士康质检员张全蛋44 分钟前
JDBC 连接池
数据库
GIS之路1 小时前
GDAL 实现空间分析
前端
yangminlei1 小时前
集成Camunda到Spring Boot项目
数据库·oracle