我正在尝试利用 Polly处理任意结果条件的能力 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”是 < em>不在结果体中。
最佳答案
.HandleResult<TResult>(Func<TResult, bool>)
子句指定 TResult
如果您想被视为失败 - TResult
应该(在这种情况下)触发重试的值。如果“bla”不在结果主体中,结果将被视为成功,不会重试,您将(预期行为)得到 .Outcome == OutcomeType.Successful
.
Polly 代码库中的以下单元测试演示了如何 .ExecuteAndCapture(...)
正在返回 OutcomeType.Failure
什么时候应该:https://github.com/App-vNext/Polly/blob/73fc38029f52d2e1bfa6f4b03bcb1e12d8c78065/src/Polly.SharedSpecs/PolicyTResultSpecs.cs#L50
关于c# - 无论实际响应如何,Polly 重试策略结果始终成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418033/