internal static async Task <IRestApiResult <TResult> > PollyDecorator <TResult>( Func <Task <IRestApiResult <TResult> > > action, int retryCount, Func <int, TimeSpan> sleepDurationProvider) { IRestApiResult <TResult> result = null; try { result = await Policy .Handle <WebException>() .WaitAndRetryAsync ( retryCount: retryCount, sleepDurationProvider: sleepDurationProvider ) .ExecuteAsync(action).ConfigureAwait(false); } catch (Exception e) { if (e.GetType().Namespace == "Java.Net") { return(new RestApiResult <TResult>(HttpStatusCode.RequestTimeout, default(TResult), "Request Time-out", e.ToString())); } throw; } return(result); }
public static IRestApiResult <TResult> OnFailure <TResult>(this IRestApiResult <TResult> restApiResult, OnFailureAction action) { if (!restApiResult.IsSuccessStatusCode) { action(restApiResult.HttpStatusCode, restApiResult.ReasonPhrase, restApiResult.DetailedErrorMessage); } return(restApiResult); }
public static IRestApiResult <TResult> OnSuccess <TResult>(this IRestApiResult <TResult> restApiResult, OnSuccessAction <TResult> action) { if (restApiResult.IsSuccessStatusCode) { action(restApiResult.Content); } return(restApiResult); }