/// <summary> /// Builds a <see cref="Policy"/> that will wait asynchronously for a delegate to complete for a specified period of time. A <see cref="TimeoutRejectedException"/> will be thrown if the delegate does not complete within the configured timeout. /// </summary> /// <param name="timeout">The timeout.</param> /// <returns>The policy instance.</returns> /// <exception cref="System.ArgumentOutOfRangeException">timeout;Value must be a positive TimeSpan (or Timeout.InfiniteTimeSpan to indicate no timeout)</exception> public static TimeoutPolicy TimeoutAsync(TimeSpan timeout) { TimeoutValidator.ValidateTimeoutIsInRange(timeout); Func <Context, TimeSpan, Task, Task> doNothingAsync = (_, __, ___) => TaskHelper.EmptyTask; return(TimeoutAsync(ctx => timeout, TimeoutStrategy.Optimistic, doNothingAsync)); }
/// <summary> /// Builds a <see cref="Policy{TResult}"/> that will wait for a delegate to complete for a specified period of time. A <see cref="TimeoutRejectedException"/> will be thrown if the delegate does not complete within the configured timeout. /// </summary> /// <param name="timeout">The timeout.</param> /// <returns>The policy instance.</returns> /// <exception cref="System.ArgumentOutOfRangeException">timeout;Value must be a positive TimeSpan (or Timeout.InfiniteTimeSpan to indicate no timeout)</exception> public static TimeoutPolicy <TResult> Timeout <TResult>(TimeSpan timeout) { TimeoutValidator.ValidateTimeoutIsInRange(timeout); Action <Context, TimeSpan, Task> doNothing = (_, __, ___) => { }; return(Timeout <TResult>(ctx => timeout, TimeoutStrategy.Optimistic, doNothing)); }
/// <summary> /// Builds a <see cref="Policy" /> that will wait for a delegate to complete for a specified period of time. A <see cref="TimeoutRejectedException" /> will be thrown if the delegate does not complete within the configured timeout. /// </summary> /// <param name="timeout">The timeout.</param> /// <param name="timeoutStrategy">The timeout strategy.</param> /// <returns>The policy instance.</returns> /// <exception cref="System.ArgumentOutOfRangeException">timeout;Value must be a positive TimeSpan (or Timeout.InfiniteTimeSpan to indicate no timeout)</exception> public static TimeoutPolicy Timeout(TimeSpan timeout, TimeoutStrategy timeoutStrategy) { TimeoutValidator.ValidateTimeoutIsInRange(timeout); Action <Context, TimeSpan, Task> doNothing = (_, __, ___) => { }; return(Timeout(ctx => timeout, timeoutStrategy, doNothing)); }
/// <summary> /// Builds a <see cref="Policy{TResult}"/> that will wait asynchronously for a delegate to complete for a specified period of time. A <see cref="TimeoutRejectedException"/> will be thrown if the delegate does not complete within the configured timeout. /// </summary> /// <param name="timeout">The timeout.</param> /// <returns>The policy instance.</returns> /// <exception cref="System.ArgumentOutOfRangeException">timeout;Value must be a positive TimeSpan (or Timeout.InfiniteTimeSpan to indicate no timeout)</exception> public static TimeoutPolicy <TResult> TimeoutAsync <TResult>(TimeSpan timeout) { TimeoutValidator.ValidateTimeoutIsInRange(timeout); Func <Context, TimeSpan, Task, Task> doNothingAsync = (_, __, ___) => TaskHelper.FromResult(default(TResult)); return(TimeoutAsync <TResult>(ctx => timeout, TimeoutStrategy.Optimistic, doNothingAsync)); }
/// <summary> /// Builds a <see cref="Policy{TResult}"/> that will wait asynchronously for a delegate to complete for a specified period of time. A <see cref="TimeoutRejectedException"/> will be thrown if the delegate does not complete within the configured timeout. /// </summary> /// <param name="timeout">The timeout.</param> /// <param name="onTimeoutAsync">An action to call on timeout, passing the execution context, the timeout applied, and a <see cref="Task"/> capturing the abandoned, timed-out action. /// <remarks>The Task parameter will be null if the executed action responded co-operatively to cancellation before the policy timed it out.</remarks></param> /// <returns>The policy instance.</returns> /// <exception cref="System.ArgumentOutOfRangeException">timeout;Value must be a positive TimeSpan (or Timeout.InfiniteTimeSpan to indicate no timeout)</exception> /// <exception cref="System.ArgumentNullException">onTimeoutAsync</exception> public static TimeoutPolicy <TResult> TimeoutAsync <TResult>(TimeSpan timeout, Func <Context, TimeSpan, Task, Task> onTimeoutAsync) { TimeoutValidator.ValidateTimeoutIsInRange(timeout); if (onTimeoutAsync == null) { throw new ArgumentNullException(nameof(onTimeoutAsync)); } return(TimeoutAsync <TResult>(ctx => timeout, TimeoutStrategy.Optimistic, onTimeoutAsync)); }
/// <summary> /// Builds a <see cref="Policy" /> that will wait asynchronously for a delegate to complete for a specified period of time. A <see cref="TimeoutRejectedException" /> will be thrown if the delegate does not complete within the configured timeout. /// </summary> /// <param name="timeout">The timeout.</param> /// <param name="timeoutStrategy">The timeout strategy.</param> /// <param name="onTimeoutAsync">An action to call on timeout, passing the execution context, the timeout applied, and a <see cref="Task" /> capturing the abandoned, timed-out action. /// <remarks>The Task parameter will be null if the executed action responded co-operatively to cancellation before the policy timed it out.</remarks></param> /// <returns>The policy instance.</returns> /// <exception cref="System.ArgumentOutOfRangeException">timeout;Value must be a positive TimeSpan (or Timeout.InfiniteTimeSpan to indicate no timeout)</exception> /// <exception cref="System.ArgumentNullException">onTimeoutAsync</exception> public static TimeoutPolicy TimeoutAsync(TimeSpan timeout, TimeoutStrategy timeoutStrategy, Func <Context, TimeSpan, Task, Task> onTimeoutAsync) { TimeoutValidator.ValidateTimeoutIsInRange(timeout); return(TimeoutAsync(ctx => timeout, timeoutStrategy, onTimeoutAsync)); }
/// <summary> /// Builds a <see cref="Policy{TResult}" /> that will wait for a delegate to complete for a specified period of time. A <see cref="TimeoutRejectedException" /> will be thrown if the delegate does not complete within the configured timeout. /// </summary> /// <typeparam name="TResult">The return type of delegates which may be executed through the policy.</typeparam> /// <param name="timeout">The timeout.</param> /// <param name="timeoutStrategy">The timeout strategy.</param> /// <param name="onTimeout">An action to call on timeout, passing the execution context, the timeout applied, and a <see cref="Task{TResult}" /> capturing the abandoned, timed-out action. /// <remarks>The Task parameter will be null if the executed action responded co-operatively to cancellation before the policy timed it out.</remarks></param> /// <returns>The policy instance.</returns> /// <exception cref="System.ArgumentOutOfRangeException">timeout;Value must be a positive TimeSpan (or Timeout.InfiniteTimeSpan to indicate no timeout)</exception> /// <exception cref="System.ArgumentNullException">onTimeout</exception> public static TimeoutPolicy <TResult> Timeout <TResult>(TimeSpan timeout, TimeoutStrategy timeoutStrategy, Action <Context, TimeSpan, Task> onTimeout) { TimeoutValidator.ValidateTimeoutIsInRange(timeout); return(Timeout <TResult>(ctx => timeout, timeoutStrategy, onTimeout)); }
/// <summary> /// Builds a <see cref="Policy"/> that will wait for a delegate to complete for a specified period of time. A <see cref="TimeoutRejectedException"/> will be thrown if the delegate does not complete within the configured timeout. /// </summary> /// <param name="timeout">The timeout.</param> /// <param name="onTimeout">An action to call on timeout, passing the execution context, the timeout applied, and a <see cref="Task"/> capturing the abandoned, timed-out action. /// <remarks>The Task parameter will be null if the executed action responded co-operatively to cancellation before the policy timed it out.</remarks></param> /// <returns>The policy instance.</returns> /// <exception cref="System.ArgumentOutOfRangeException">timeout;Value must be a positive TimeSpan (or Timeout.InfiniteTimeSpan to indicate no timeout)</exception> /// <exception cref="System.ArgumentNullException">onTimeout</exception> public static TimeoutPolicy Timeout(TimeSpan timeout, Action <Context, TimeSpan, Task> onTimeout) { TimeoutValidator.ValidateTimeoutIsInRange(timeout); return(Timeout(ctx => timeout, TimeoutStrategy.Optimistic, onTimeout)); }