Как использовать SetRequestCoordinator из библиотеки Pathoschild?

Я намеренно установил очень маленькое время ожидания, чтобы вызвать сбой 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


person onepix    schedule 28.06.2017    source источник


Ответы (1)


Это было упущением в координаторе повторных попыток, добавленном в 3.0 — он повторял попытку, если сервер возвращал ошибку, но не в случае локального истечения времени ожидания запроса. Это было исправлено в 3.1.

person Pathoschild    schedule 29.06.2017