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}");
                });
            });
相关推荐
Android疑难杂症几秒前
一文讲清鸿蒙网络开发
前端·javascript·harmonyos
爱学习的程序媛3 分钟前
【JavaScript基础】Null类型详解
前端·javascript
铭哥的编程日记5 分钟前
【Linux网络】五种IO模型与非阻塞IO
linux·服务器·网络·tcp/ip·udp
前端一课7 分钟前
uniapp之WebView容器原理详解
前端
CryptoRzz10 分钟前
DeepSeek印度股票数据源 Java 对接文档
前端·后端
网络点点滴40 分钟前
watch监视-ref基本类型数据
前端·javascript·vue.js
半熟的皮皮虾1 小时前
因需写了个内网运维专用的IP地址管理工具,有点不同
运维·服务器·tcp/ip
西洼工作室1 小时前
前端接口安全与性能优化实战
前端·vue.js·安全·axios
大布布将军1 小时前
《前端九阴真经》
前端·javascript·经验分享·程序人生·前端框架·1024程序员节
幸运小圣1 小时前
for...of vs for 循环全面对比【前端JS】
开发语言·前端·javascript