爲了測試重試功能,我特意設置了非常低的http調用崩潰的超時,但是引發了一個異常,因此httpClient沒有重試以前的請求。
起初我以爲只有在經過maxRetry配置的一些嘗試失敗(HTTP代碼500)後,纔會引發異常。如何使用Pathoschild庫中的SetRequestCoordinator?
因此,我的代碼邏輯被破壞,如果我強制執行以再次執行與PostAsync
的API調用,則重試功能將無用,代碼很髒。發生一個或多個錯誤:
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(布爾waitCompletionNotification)
在System.Threading.Tasks.Task 1.get_Result()
在xxx.xx.xxQueryPrivate [T](ApiClient apiClient,字符串myHTTPMethod,字符串_RelativeURL,的Int32 _myTimeOut,對象_payload)在zzz.cs:管線337