无论实际响应如何,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>) 子句指定了您希望被视为失败的 TResults - TResult 应该(在这种情况下)触发重试的值。如果 "bla" 不在结果主体中,则结果将被视为成功,不会重试,您将(预期行为)得到 .Outcome == OutcomeType.Successful

Polly 代码库中的以下单元测试演示了 .ExecuteAndCapture(...) 如何在应该返回 OutcomeType.Failure 时返回:https://github.com/App-vNext/Polly/blob/73fc38029f52d2e1bfa6f4b03bcb1e12d8c78065/src/Polly.SharedSpecs/PolicyTResultSpecs.cs#L50