我正在try 进行一些HTTP调用,我希望具有重试、超时和隔板功能,以获得最大并发连接数.这是我的try .我不知道这WrapAsync
个函数调用的顺序是否正确.更具体地说,
- 我有时可能会从服务器获得4xx或5xx响应,我希望Polly处理这些响应
- 我不希望
HttpClient
发出超过3个并发的HTTP调用,并且我将队列大小设置为"无限" - 如果服务器在20秒内没有响应,则该try 超时
- 对于重试,通过指数增加超时来使用指数超时策略
我的问题是,这段代码是否实现了我所认为的功能?
var betterPolicy = HttpPolicyExtensions.HandleTransientHttpError().OrTransientHttpStatusCode()
.WaitAndRetryAsync(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)))
.WrapAsync(Policy.BulkheadAsync(3, int.MaxValue /* queue size */))
.WrapAsync(Policy.TimeoutAsync<HttpResponseMessage>(TimeSpan.FromSeconds(20)));
var httpClient = new HttpClient(new PolicyHttpMessageHandler(betterPolicy));