使用Polly让程序有Retry的机制

有时候我们需要调用其他API的时候出现暂时连接不通超时的情况,那这时候可以通过Polly进行Retry。

1、从nuget引用polly,

2、定义需要处理的异常有哪些,比如

Policy.Handle<TimeoutException>().Or<FormatException>()

3、异常发生时候需要定义重试几次,等多久后再重试,比如

var policy = Policy.Handle<TimeoutException>().RetryAsync(3, (exception, retryCount) =>
{

});

4、代码跟policy结合起来的demo如下:

       private static Logger logger = LogManager.GetCurrentClassLogger();

        private static void Main(string[] args)
        {
            var policy = Policy.Handle<TimeoutException>()
                .WaitAndRetryAsync(5, retryAttempt => TimeSpan.FromSeconds(5), (exception, retryCount) =>
            {
                logger.Error(exception);
            });

            var result = policy.ExecuteAsync(() => Test());
        }

        private static async Task Test()
        {
            using (var httpClient = new HttpClient())
            {
                var response = httpClient.GetAsync("http://news.cnblogs.com/Category/GetCategoryList?bigCateId=11&loadType=0").Result;
                await response.Content.ReadAsStringAsync();
            }
        }
原文地址:https://www.cnblogs.com/hj4444/p/4746616.html