internal static TResult ExecuteSyncTaskWithRetry <TResult>(SynchronousTask <TResult> syncTask, RetryPolicy policy) { CommonUtils.AssertNotNull("syncTask", syncTask); CommonUtils.AssertNotNull("policy", policy); var oracle = policy(); return(RequestWithRetry.RequestWithRetrySyncImpl <TResult>(oracle, syncTask)); }
internal static Task <T> GetRetryableAsyncTask <T>(Func <Action <T>, TaskSequence> impl, RetryPolicy policy) { CommonUtils.AssertNotNull("impl", impl); CommonUtils.AssertNotNull("policy", policy); ShouldRetry oracle = policy(); InvokeTaskSequenceTask <T> retryableTask = new InvokeTaskSequenceTask <T>( (setResult) => RequestWithRetry.RequestWithRetryImpl <T>(oracle, impl, setResult)); return(retryableTask); }
internal static Task <NullTaskReturn> GetRetryableAsyncTask(Func <TaskSequence> impl, RetryPolicy policy) { CommonUtils.AssertNotNull("impl", impl); CommonUtils.AssertNotNull("policy", policy); ShouldRetry oracle = policy(); InvokeTaskSequenceTask retryableTask = new InvokeTaskSequenceTask( () => RequestWithRetry.RequestWithRetryImpl <NullTaskReturn>( oracle, (setResult) => impl(), (scratch) => { })); return(retryableTask); }