2017-06-28 111 views
0

爲了測試重試功能,我特意設置了非常低的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

回答

0

這是新的重試協調器中的一個疏忽 - 如果服務器返回錯誤,但它不重試如果請求超時本地。我將在即將發佈的3.1版本中解決這個問題。 :)