【发布时间】:2021-05-04 23:27:58
【问题描述】:
在我的应用中,我使用 Polly 库来调用 API。
API 可以在响应中返回警告和错误。对于其中一些警告,我想重试 2 次,下一次我想将响应返回给调用者。
这个可以吗?
编辑:
@StephenCleary 指出我应该只处理 响应 而不要抛出异常。
要检查响应,我需要等待内容。以下将无法编译,任何人都可以看到我如何做到这一点?
static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
return HttpPolicyExtensions
.HandleTransientHttpError()
.OrResult(async msg =>
{
var content = await msg.Content.ReadAsStringAsync();
return content.Contains("errorcode123");
})
.WaitAndRetryAsync(2, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));
}
【问题讨论】:
-
您的主线程在 _httpClient.PostAsync() 中被阻塞,等待响应。您需要围绕代码循环重试。所以你还需要改变等待。
-
@jdweng 这里没有什么阻碍,到底是什么让你有这个想法?
-
we throw a custom exception- 通过抛出异常,您将放弃响应。相反,您应该做的是使用确定是否重试的委托来处理 Polly 中的 响应。 -
谢谢@StephenCleary,你能看看我是怎么做到的吗?
-
@DavidG : var httpResponse = await _httpClient.PostAsync(requestUri, new StringContent(requestJson, Encoding.UTF8, "application/json"));