Я использую httpClient для выполнения запроса POST. Я использую Полли для повторных попыток. Что происходит, так это то, что первая попытка занимает 14 секунд, хотя я указал время повтора 2 секунды. Первая попытка не удалась через 14 секунд, затем есть пауза в 2 секунды до второй попытки. Я хочу, чтобы он пробовал каждые 2 секунды и тайм-аут и повторял попытку при любой ошибке. Это правильный способ сделать это?
var retryPolicy = Policy
.Handle<Exception>() // retry on any
.WaitAndRetryAsync(6,
retryAttempt => TimeSpan.FromMilliseconds(2000),
(response, calculatedWaitDuration, ctx) =>
{
Log.LogError($"Failed attempt {attempt++}. Waited for {calculatedWaitDuration}. Exception: {response?.ToString()}");
});
HttpResponseMessage httpResp = null;
await retryPolicy.ExecuteAsync(async () =>
{
httpResp = await DoPost();
httpResp?.EnsureSuccessStatusCode(); // throws HttpRequestException
return httpResp;
});
var respBody = await httpResp.Content.ReadAsStringAsync();
return respBody;
async Task<HttpResponseMessage> DoPost()
{
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, url)
{
Content = new StringContent(json, Encoding.UTF8, Constants.JsonContentType),
Headers = { Authorization = await GetAuthenticationTokenAsync() }
};
ServicePointManager.Expect100Continue = false;
var httpResponseMessage = await StaticHttpClient.SendAsync(httpRequestMessage).ConfigureAwait(false);
return httpResponseMessage;
}