无论实际响应如何,Polly 重试策略结果始终成功
Polly retry policy outcome always successful regardless of actual response
我正在尝试利用 Polly's ability to handle arbitrary result conditions https://github.com/App-vNext/Polly/#step-1b-optionally-specify-return-results-you-want-to-handle。
在我的测试用例中,我使用 RestSharp 发出 HTTP 请求。这是我的示例代码:
var policy = Policy
.HandleResult<IRestResponse>(r => r.Content.Contains("bla"))
.Retry(2)
.ExecuteAndCapture(() =>
{
IRestClient client = new RestClient("https://httpbin.org/anything");
IRestRequest request = new RestRequest(Method.GET);
var response = client.Execute(request);
return response;
});
对 https://httpbin.org/anything 的调用回显了一堆内容 - 确切的内容不相关。正如您在谓词中所见,我正在结果主体中查找字符串 "bla"。
问题是policy.Outcome
总是成功(policy.Outcome == OutcomeType.Successful
)但"bla"不[=26] =] 在结果正文中。
.HandleResult<TResult>(Func<TResult, bool>)
子句指定了您希望被视为失败的 TResult
s - TResult
应该(在这种情况下)触发重试的值。如果 "bla" 不在结果主体中,则结果将被视为成功,不会重试,您将(预期行为)得到 .Outcome == OutcomeType.Successful
。
Polly 代码库中的以下单元测试演示了 .ExecuteAndCapture(...)
如何在应该返回 OutcomeType.Failure
时返回:https://github.com/App-vNext/Polly/blob/73fc38029f52d2e1bfa6f4b03bcb1e12d8c78065/src/Polly.SharedSpecs/PolicyTResultSpecs.cs#L50
我正在尝试利用 Polly's ability to handle arbitrary result conditions https://github.com/App-vNext/Polly/#step-1b-optionally-specify-return-results-you-want-to-handle。
在我的测试用例中,我使用 RestSharp 发出 HTTP 请求。这是我的示例代码:
var policy = Policy
.HandleResult<IRestResponse>(r => r.Content.Contains("bla"))
.Retry(2)
.ExecuteAndCapture(() =>
{
IRestClient client = new RestClient("https://httpbin.org/anything");
IRestRequest request = new RestRequest(Method.GET);
var response = client.Execute(request);
return response;
});
对 https://httpbin.org/anything 的调用回显了一堆内容 - 确切的内容不相关。正如您在谓词中所见,我正在结果主体中查找字符串 "bla"。
问题是policy.Outcome
总是成功(policy.Outcome == OutcomeType.Successful
)但"bla"不[=26] =] 在结果正文中。
.HandleResult<TResult>(Func<TResult, bool>)
子句指定了您希望被视为失败的 TResult
s - TResult
应该(在这种情况下)触发重试的值。如果 "bla" 不在结果主体中,则结果将被视为成功,不会重试,您将(预期行为)得到 .Outcome == OutcomeType.Successful
。
Polly 代码库中的以下单元测试演示了 .ExecuteAndCapture(...)
如何在应该返回 OutcomeType.Failure
时返回:https://github.com/App-vNext/Polly/blob/73fc38029f52d2e1bfa6f4b03bcb1e12d8c78065/src/Polly.SharedSpecs/PolicyTResultSpecs.cs#L50