我试图利用Polly处理任意结果条件的能力。
在我的测试用例中,我使用https://github.com/App-vNext/Polly/#step-1b-optionally-specify-return-results-you-want-to-handle发出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;
});
调用RestSharp会返回一堆东西-确切的内容与此无关。正如您在谓词中看到的,我正在结果体中查找字符串“bla”。
问题是
policy.Outcome
总是成功的(policy.Outcome == OutcomeType.Successful
),但是“bla”不在结果体中。 最佳答案
.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