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}");
                });
            });
相关推荐
fruge21 小时前
仿写优秀组件:还原 Element Plus 的 Dialog 弹窗核心逻辑
前端
w***42421 小时前
【MySQL】复合查询
数据库·mysql
an869500121 小时前
vue新建项目
前端·javascript·vue.js
wanhengidc1 天前
网站服务器都有哪些作用?
运维·服务器·科技·智能手机·云计算
卓小帅的博客1 天前
关于实现远程服务器使用本地网络的清晰简洁的教程
服务器·网络·vscode·连接超时
q***01771 天前
【MySQL】表的基本操作
数据库·mysql·oracle
budingxiaomoli1 天前
存储过程和触发器
数据库
w***95491 天前
SQL美化器:sql-beautify安装与配置完全指南
android·前端·后端
q***12531 天前
PostgreSQL_安装部署
数据库·postgresql
q***48251 天前
mysql用户名怎么看
数据库·mysql