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);
        }
示例#2
0
        public static IRestApiResult <TResult> OnFailure <TResult>(this IRestApiResult <TResult> restApiResult,
                                                                   OnFailureAction action)
        {
            if (!restApiResult.IsSuccessStatusCode)
            {
                action(restApiResult.HttpStatusCode, restApiResult.ReasonPhrase, restApiResult.DetailedErrorMessage);
            }

            return(restApiResult);
        }
示例#3
0
        public static IRestApiResult <TResult> OnSuccess <TResult>(this IRestApiResult <TResult> restApiResult,
                                                                   OnSuccessAction <TResult> action)
        {
            if (restApiResult.IsSuccessStatusCode)
            {
                action(restApiResult.Content);
            }

            return(restApiResult);
        }