我正在使用Polly v8和. NET framework 4.7.2只重试特定的状态响应.但是,当试图将重试限制为仅这些状态时,代码将不再调用重试行为.
值得注意的是,在HttpRequestException
上添加一个Handle
可以工作,但在其他状态代码上,如果首选的只是快速失败并记录,
请看下面的例子:
public ResiliencePipilineBuilder<HttpResponseMessage> BuildStrategy()
{
var statusCodes = new List<HttpStatusCode>
{
HttpStatusCode.InternalServerError
};
PredicateBuilder<HttpResponseMessage> predicateBuilder = new PredicateBuilder<HttpResponseMessage>()
// .Handle<HttpRequestException>() NOTE: this would work see explanation
.HandleResult(response => statusCodes.Contains(response.StatusCode));
...
return new ResiliencePipilineBuilder<HttpResponseMessage>()
.AddRetry(new RetryStrategyOptions<HttpResponseMessage>()
{
ShouldHandle = predicateBuilder,
...
});
}
public async Task<Data> SendIt()
{
var strategy = BuildStrategy();
var result = strategy.ExecuteAsync(async token =>
{
var response = await client.SendAsync()
response.EnsureSuccessStatusCode();
...
})
}
在新的V8风格中,是否可以单独使用HandleResult
来捕获我想要的请求?
我将不得不恢复到v7方法吗?
Polly的文档显示了这两种方法(Handle
和HandleResult
),但它们是成对的,而不是单独的