C# Polly .NET瞬时故障处理 - 重试
Polly是什么
简单地说,Polly是一个能捕获异常(包括不符合预期的结果),并可以使用重试、超时、断路等一些列处理操作的库,它是线程安全和支持流式调用的。
Polly支持的策略
Polly支持的策略可以在Polly Wiki查看,数量颇多。
重试策略
重试是最容易理解的一个概念,那么我们就从重试开始了解Polly的使用方法。
using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using Polly;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var myPolicy = Policy
//捕获异常
.Handle<Exception>()
//预期结果
.OrResult<string>(str => string.IsNullOrEmpty(str))
//重试策略
.Retry(2, (exception, retryCount, context) =>
{
Console.WriteLine($"重试次数: {retryCount}");
});
try
{
bool throwEx = false;
//执行
var result = myPolicy.Execute(() =>
{
Console.WriteLine("正在执行任务...");
Thread.Sleep(2000);
if (throwEx)
{ //抛出异常.达到重试允许次数之后Polly会往上rethrow
throw new Exception();
}
else
{
throwEx = true; //切换模式
return ""; //空字符串,不符合预期
}
});
}
catch (Exception ex)
{
Console.WriteLine($"重试2次之后仍然失败");
}
Console.ReadKey();
}
}
}
总结
以前项目中的异常都是靠手工撸码来处理的,一来对于后续维护不理想,二来项目时间匆忙也无法考虑全面,虽然一直都知道Polly,但原有的项目框架都固定了没法改,不久前开始学习使用Polly,借此做个笔记,加深印象,码农共勉。