我故意将超时设置为非常低,以使 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()
at xxx.xx.xxQueryPrivate[T](ApiClient apiClient, String myHTTPMethod, String _RelativeURL, Int32 _myTimeOut, Object _payload) in zzz.cs:line 337