Я намеренно установил очень маленькое время ожидания, чтобы вызвать сбой http-вызова, чтобы проверить функцию повтора, но возникает исключение, поэтому httpClient не повторяет предыдущий запрос.
Сначала я подумал, что только если после некоторых попыток настроенный maxRetry не удалось (HTTP-код 500), тогда будет возбуждено исключение.
Таким образом, логика моего кода нарушена, и если я заставлю выполнение снова выполнить вызов API с помощью PostAsync
, функция повторной попытки будет бесполезной, а код будет сильно грязным.
IClient clientV2 = new FluentClient(apiClient.getBasedUrl());
clientV2.BaseClient.Timeout = TimeSpan.FromMilliseconds(50);
clientV2.SetRequestCoordinator(
maxRetries: 3,
shouldRetry: request => request.StatusCode != HttpStatusCode.OK,
getDelay: (attempt, response) => { return TimeSpan.FromSeconds(1); } // 1, 2, and 3 seconds
);
try
{
T result = clientV2.PostAsync(_RelativeURL)
.WithHeader("APIKEY", apikey)
.WithHeader("PAYLOAD", b64)
.WithHeader("SIGNATURE", hmacSig)
.As<T>()
.Result;
dynamicJSONResult = bitfinexTicker;
} catch (Exception ex)
{
Console.WriteLine(ex);
}
System.AggregateException: произошла одна или несколько ошибок. --->
System.Threading.Tasks.TaskCanceledException: задача была отменена.
--- Конец внутренней трассировки стека исключений ---
в System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
в System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification)
в System.Threading.Tasks.Task 1.get_Result()
в xxx.xx.xxQueryPrivate[T]( ApiClient apiClient, String myHTTPMethod, String _RelativeURL, Int32 _myTimeOut, Object _payload) в zzz.cs:строка 337