public static Abstractions.FuncExecutionResult <T> RetryIf <T>(this Abstractions.FuncExecutionResult <T> result, Func <Abstractions.FuncExecutionResult <T>, bool> retryIfCode, int numberOfRetries)
        {
            if (result == null || result.WasSuccessful)
            {
                return(result);
            }
            int count = 0;

            while (count < numberOfRetries)
            {
                if (retryIfCode.Invoke(result))
                {
                    var newResult = result.ExecutedBy.TryExecute(result.ExecutedCode);
                    if (newResult.WasSuccessful)
                    {
                        return(newResult);
                    }
                }
                count++;
            }

            return(result);
        }
 public static Abstractions.FuncExecutionResult <T> RetryOnce <T>(this Abstractions.FuncExecutionResult <T> result)
 {
     return(Retry(result, numberOfRetries: 1));
 }
 public static Abstractions.FuncExecutionResult <T> RetryOnceIf <T>(this Abstractions.FuncExecutionResult <T> result, Func <Abstractions.FuncExecutionResult <T>, bool> retryIfCode)
 {
     return(RetryIf(result, retryIfCode, numberOfRetries: 1));
 }
 public static Abstractions.FuncExecutionResult <T> Retry <T>(this Abstractions.FuncExecutionResult <T> result, int numberOfRetries)
 {
     return(RetryIf(result,
                    retryIfCode: (a) => true,
                    numberOfRetries: numberOfRetries));
 }