Как использовать 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(логическое значение includeTaskCanceledExceptions)
в System.Threading.Tasks.Task 1.GetResultCore(логическое ожидание завершения уведомления)
в System.Threading.Tasks.Task 1.get_Result()
в xxx.xx.xxQueryPrivate[T](ApiClient apiClient, Строка myHTTPMethod, Строка _RelativeURL, Int32 _myTimeOut, Объект _payload) в zzz.cs: строка 337
1 ответ
Это упущение в новом координаторе повторных попыток - он повторяет попытку, если сервер возвращает ошибку, но не в том случае, если время ожидания запроса локально. Я исправлю это в следующей версии 3.1.:)