/// <summary>
 /// <para> Builds a <see cref="AsyncPolicy{TResult}"/> that will function like a Circuit Breaker.</para>
 /// <para>The circuit will break if <paramref name="handledEventsAllowedBeforeBreaking"/>
 /// exceptions or results that are handled by this policy are encountered consecutively. </para>
 /// <para>The circuit will stay broken for the <paramref name="durationOfBreak"/>. Any attempt to execute this policy
 /// while the circuit is broken, will immediately throw a <see cref="BrokenCircuitException"/> containing the exception or result
 /// that broke the circuit.
 /// </para>
 /// <para>If the first action after the break duration period results in a handled exception or result, the circuit will break
 /// again for another <paramref name="durationOfBreak"/>; if no exception or handled result is encountered, the circuit will reset.
 /// </para>
 /// </summary>
 /// <param name="policyBuilder">The policy builder.</param>
 /// <param name="handledEventsAllowedBeforeBreaking">The number of exceptions or handled results that are allowed before opening the circuit.</param>
 /// <param name="durationOfBreak">The duration the circuit will stay open before resetting.</param>
 /// <param name="onBreak">The action to call when the circuit transitions to an <see cref="CircuitState.Open"/> state.</param>
 /// <param name="onReset">The action to call when the circuit resets to a <see cref="CircuitState.Closed"/> state.</param>
 /// <returns>The policy instance.</returns>
 /// <remarks>(see "Release It!" by Michael T. Nygard fi)</remarks>
 /// <exception cref="System.ArgumentOutOfRangeException">handledEventsAllowedBeforeBreaking;Value must be greater than zero.</exception>
 /// <exception cref="ArgumentNullException">onBreak</exception>
 /// <exception cref="ArgumentNullException">onReset</exception>
 public static AsyncCircuitBreakerPolicy <TResult> CircuitBreakerAsync <TResult>(this PolicyBuilder <TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action <DelegateResult <TResult>, TimeSpan> onBreak, Action onReset)
 => policyBuilder.CircuitBreakerAsync(
     handledEventsAllowedBeforeBreaking,
     durationOfBreak,
     (outcome, timespan, context) => onBreak(outcome, timespan),
     context => onReset()
     );
Example #2
0
 /// <summary>
 /// <para> Builds a <see cref="AsyncPolicy"/> that will function like a Circuit Breaker.</para>
 /// <para>The circuit will break if <paramref name="exceptionsAllowedBeforeBreaking"/>
 /// exceptions that are handled by this policy are raised consecutively. </para>
 /// <para>The circuit will stay broken for the <paramref name="durationOfBreak"/>. Any attempt to execute this policy
 /// while the circuit is broken, will immediately throw a <see cref="BrokenCircuitException"/> containing the exception
 /// that broke the circuit.
 /// </para>
 /// <para>If the first action after the break duration period results in a handled exception, the circuit will break
 /// again for another <paramref name="durationOfBreak"/>; if no exception is thrown, the circuit will reset.
 /// </para>
 /// </summary>
 /// <param name="policyBuilder">The policy builder.</param>
 /// <param name="exceptionsAllowedBeforeBreaking">The number of exceptions that are allowed before opening the circuit.</param>
 /// <param name="durationOfBreak">The duration the circuit will stay open before resetting.</param>
 /// <param name="onBreak">The action to call when the circuit transitions to an <see cref="CircuitState.Open"/> state.</param>
 /// <param name="onReset">The action to call when the circuit resets to a <see cref="CircuitState.Closed"/> state.</param>
 /// <returns>The policy instance.</returns>
 /// <remarks>(see "Release It!" by Michael T. Nygard fi)</remarks>
 /// <exception cref="ArgumentOutOfRangeException">exceptionsAllowedBeforeBreaking;Value must be greater than zero.</exception>
 /// <exception cref="ArgumentNullException">onBreak</exception>
 /// <exception cref="ArgumentNullException">onReset</exception>
 public static AsyncCircuitBreakerPolicy CircuitBreakerAsync(this PolicyBuilder policyBuilder, int exceptionsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action <Exception, TimeSpan> onBreak, Action onReset)
 => policyBuilder.CircuitBreakerAsync(
     exceptionsAllowedBeforeBreaking,
     durationOfBreak,
     (exception, timespan, _) => onBreak(exception, timespan),
     _ => onReset()
     );
Example #3
0
 /// <summary>
 /// <para> Builds a <see cref="AsyncPolicy"/> that will function like a Circuit Breaker.</para>
 /// <para>The circuit will break if <paramref name="exceptionsAllowedBeforeBreaking"/>
 /// exceptions that are handled by this policy are raised consecutively. </para>
 /// <para>The circuit will stay broken for the <paramref name="durationOfBreak"/>. Any attempt to execute this policy
 /// while the circuit is broken, will immediately throw a <see cref="BrokenCircuitException"/> containing the exception
 /// that broke the circuit.
 /// </para>
 /// <para>If the first action after the break duration period results in a handled exception, the circuit will break
 /// again for another <paramref name="durationOfBreak"/>; if no exception is thrown, the circuit will reset.
 /// </para>
 /// </summary>
 /// <param name="policyBuilder">The policy builder.</param>
 /// <param name="exceptionsAllowedBeforeBreaking">The number of exceptions that are allowed before opening the circuit.</param>
 /// <param name="durationOfBreak">The duration the circuit will stay open before resetting.</param>
 /// <param name="onBreak">The action to call when the circuit transitions to an <see cref="CircuitState.Open"/> state.</param>
 /// <param name="onReset">The action to call when the circuit resets to a <see cref="CircuitState.Closed"/> state.</param>
 /// <param name="onHalfOpen">The action to call when the circuit transitions to <see cref="CircuitState.HalfOpen"/> state, ready to try action executions again. </param>
 /// <returns>The policy instance.</returns>
 /// <remarks>(see "Release It!" by Michael T. Nygard fi)</remarks>
 /// <exception cref="ArgumentOutOfRangeException">exceptionsAllowedBeforeBreaking;Value must be greater than zero.</exception>
 /// <exception cref="ArgumentNullException">onBreak</exception>
 /// <exception cref="ArgumentNullException">onReset</exception>
 /// <exception cref="ArgumentNullException">onHalfOpen</exception>
 public static AsyncCircuitBreakerPolicy CircuitBreakerAsync(this PolicyBuilder policyBuilder, int exceptionsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action <Exception, TimeSpan, Context> onBreak, Action <Context> onReset, Action onHalfOpen)
 => policyBuilder.CircuitBreakerAsync(
     exceptionsAllowedBeforeBreaking,
     durationOfBreak,
     (exception, _, timespan, context) => onBreak(exception, timespan, context),
     onReset,
     onHalfOpen
     );
Example #4
0
 /// <summary>
 /// <para> Builds a <see cref="Policy"/> that will function like a Circuit Breaker.</para>
 /// <para>The circuit will break if <paramref name="exceptionsAllowedBeforeBreaking"/>
 /// exceptions that are handled by this policy are raised consecutively. </para>
 /// <para>The circuit will stay broken for the <paramref name="durationOfBreak"/>. Any attempt to execute this policy
 /// while the circuit is broken, will immediately throw a <see cref="BrokenCircuitException"/> containing the exception
 /// that broke the circuit.
 /// </para>
 /// <para>If the first action after the break duration period results in a handled exception, the circuit will break
 /// again for another <paramref name="durationOfBreak"/>; if no exception is thrown, the circuit will reset.
 /// </para>
 /// </summary>
 /// <param name="policyBuilder">The policy builder.</param>
 /// <param name="exceptionsAllowedBeforeBreaking">The number of exceptions that are allowed before opening the circuit.</param>
 /// <param name="durationOfBreak">The duration the circuit will stay open before resetting.</param>
 /// <param name="onBreak">The action to call when the circuit transitions to an <see cref="CircuitState.Open"/> state.</param>
 /// <param name="onReset">The action to call when the circuit resets to a <see cref="CircuitState.Closed"/> state.</param>
 /// <param name="onHalfOpen">The action to call when the circuit transitions to <see cref="CircuitState.HalfOpen"/> state, ready to try action executions again. </param>
 /// <returns>The policy instance.</returns>
 /// <remarks>(see "Release It!" by Michael T. Nygard fi)</remarks>
 /// <exception cref="System.ArgumentOutOfRangeException">exceptionsAllowedBeforeBreaking;Value must be greater than zero.</exception>
 /// <exception cref="ArgumentNullException">onBreak</exception>
 /// <exception cref="ArgumentNullException">onReset</exception>
 public static CircuitBreakerPolicy CircuitBreakerAsync(this PolicyBuilder policyBuilder, int exceptionsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action <Exception, TimeSpan> onBreak, Action onReset, Action onHalfOpen)
 {
     return(policyBuilder.CircuitBreakerAsync(
                exceptionsAllowedBeforeBreaking,
                durationOfBreak,
                (exception, timespan, context) => onBreak(exception, timespan),
                context => onReset(),
                onHalfOpen
                ));
 }
Example #5
0
 /// <summary>
 /// <para> Builds a <see cref="Policy"/> that will function like a Circuit Breaker.</para>
 /// <para>The circuit will break if <paramref name="handledEventsAllowedBeforeBreaking"/>
 /// exceptions or results that are handled by this policy are encountered consecutively. </para>
 /// <para>The circuit will stay broken for the <paramref name="durationOfBreak"/>. Any attempt to execute this policy
 /// while the circuit is broken, will immediately throw a <see cref="BrokenCircuitException"/> containing the exception or result
 /// that broke the circuit.
 /// </para>
 /// <para>If the first action after the break duration period results in a handled exception or result, the circuit will break
 /// again for another <paramref name="durationOfBreak"/>; if no exception or handled result is encountered, the circuit will reset.
 /// </para>
 /// </summary>
 /// <param name="policyBuilder">The policy builder.</param>
 /// <param name="handledEventsAllowedBeforeBreaking">The number of exceptions or handled results that are allowed before opening the circuit.</param>
 /// <param name="durationOfBreak">The duration the circuit will stay open before resetting.</param>
 /// <param name="onBreak">The action to call when the circuit transitions to an <see cref="CircuitState.Open"/> state.</param>
 /// <param name="onReset">The action to call when the circuit resets to a <see cref="CircuitState.Closed"/> state.</param>
 /// <param name="onHalfOpen">The action to call when the circuit transitions to <see cref="CircuitState.HalfOpen"/> state, ready to try action executions again. </param>
 /// <returns>The policy instance.</returns>
 /// <remarks>(see "Release It!" by Michael T. Nygard fi)</remarks>
 /// <exception cref="System.ArgumentOutOfRangeException">handledEventsAllowedBeforeBreaking;Value must be greater than zero.</exception>
 /// <exception cref="ArgumentNullException">onBreak</exception>
 /// <exception cref="ArgumentNullException">onReset</exception>
 /// <exception cref="ArgumentNullException">onHalfOpen</exception>
 public static CircuitBreakerPolicy <TResult> CircuitBreakerAsync <TResult>(this PolicyBuilder <TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action <DelegateResult <TResult>, TimeSpan, Context> onBreak, Action <Context> onReset, Action onHalfOpen)
 {
     return(policyBuilder.CircuitBreakerAsync(
                handledEventsAllowedBeforeBreaking,
                durationOfBreak,
                (outcome, state, timespan, context) => onBreak(outcome, timespan, context),
                onReset,
                onHalfOpen
                ));
 }
Example #6
0
        /// <summary>
        /// <para> Builds a <see cref="Policy"/> that will function like a Circuit Breaker.</para>
        /// <para>The circuit will break if <paramref name="exceptionsAllowedBeforeBreaking"/>
        /// exceptions that are handled by this policy are raised consecutively. </para>
        /// <para>The circuit will stay broken for the <paramref name="durationOfBreak"/>. Any attempt to execute this policy
        /// while the circuit is broken, will immediately throw a <see cref="BrokenCircuitException"/> containing the exception
        /// that broke the circuit.
        /// </para>
        /// <para>If the first action after the break duration period results in a handled exception, the circuit will break
        /// again for another <paramref name="durationOfBreak"/>; if no exception is thrown, the circuit will reset.
        /// </para>
        /// </summary>
        /// <param name="policyBuilder">The policy builder.</param>
        /// <param name="exceptionsAllowedBeforeBreaking">The number of exceptions that are allowed before opening the circuit.</param>
        /// <param name="durationOfBreak">The duration the circuit will stay open before resetting.</param>
        /// <param name="onBreak">The action to call when the circuit transitions to an <see cref="CircuitState.Open"/> state.</param>
        /// <param name="onReset">The action to call when the circuit resets to a <see cref="CircuitState.Closed"/> state.</param>
        /// <returns>The policy instance.</returns>
        /// <remarks>(see "Release It!" by Michael T. Nygard fi)</remarks>
        /// <exception cref="System.ArgumentOutOfRangeException">exceptionsAllowedBeforeBreaking;Value must be greater than zero.</exception>
        /// <exception cref="ArgumentNullException">onBreak</exception>
        /// <exception cref="ArgumentNullException">onReset</exception>
        public static CircuitBreakerPolicy CircuitBreakerAsync(this PolicyBuilder policyBuilder, int exceptionsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action <Exception, TimeSpan, Context> onBreak, Action <Context> onReset)
        {
            Action doNothingOnHalfOpen = () => { };

            return(policyBuilder.CircuitBreakerAsync(
                       exceptionsAllowedBeforeBreaking,
                       durationOfBreak,
                       onBreak,
                       onReset,
                       doNothingOnHalfOpen
                       ));
        }
Example #7
0
        /// <summary>
        /// <para> Builds a <see cref="Policy"/> that will function like a Circuit Breaker.</para>
        /// <para>The circuit will break if <paramref name="exceptionsAllowedBeforeBreaking"/>
        /// exceptions that are handled by this policy are raised consecutively. </para>
        /// <para>The circuit will stay broken for the <paramref name="durationOfBreak"/>. Any attempt to execute this policy
        /// while the circuit is broken, will immediately throw a <see cref="BrokenCircuitException"/> containing the exception
        /// that broke the circuit.
        /// </para>
        /// <para>If the first action after the break duration period results in a handled exception, the circuit will break
        /// again for another <paramref name="durationOfBreak"/>; if no exception is thrown, the circuit will reset.
        /// </para>
        /// </summary>
        /// <param name="policyBuilder">The policy builder.</param>
        /// <param name="exceptionsAllowedBeforeBreaking">The number of exceptions that are allowed before opening the circuit.</param>
        /// <param name="durationOfBreak">The duration the circuit will stay open before resetting.</param>
        /// <returns>The policy instance.</returns>
        /// <remarks>(see "Release It!" by Michael T. Nygard fi)</remarks>
        /// <exception cref="System.ArgumentOutOfRangeException">exceptionsAllowedBeforeBreaking;Value must be greater than zero.</exception>
        public static CircuitBreakerPolicy CircuitBreakerAsync(this PolicyBuilder policyBuilder, int exceptionsAllowedBeforeBreaking, TimeSpan durationOfBreak)
        {
            Action <Exception, TimeSpan> doNothingOnBreak = (_, __) => { };
            Action doNothingOnReset = () => { };

            return(policyBuilder.CircuitBreakerAsync(
                       exceptionsAllowedBeforeBreaking,
                       durationOfBreak,
                       doNothingOnBreak,
                       doNothingOnReset
                       ));
        }
        /// <summary>
        /// <para> Builds a <see cref="AsyncPolicy{TResult}"/> that will function like a Circuit Breaker.</para>
        /// <para>The circuit will break if <paramref name="handledEventsAllowedBeforeBreaking"/>
        /// exceptions or results that are handled by this policy are encountered consecutively. </para>
        /// <para>The circuit will stay broken for the <paramref name="durationOfBreak"/>. Any attempt to execute this policy
        /// while the circuit is broken, will immediately throw a <see cref="BrokenCircuitException"/> containing the exception or result
        /// that broke the circuit.
        /// </para>
        /// <para>If the first action after the break duration period results in a handled exception or result, the circuit will break
        /// again for another <paramref name="durationOfBreak"/>; if no exception or handled result is encountered, the circuit will reset.
        /// </para>
        /// </summary>
        /// <param name="policyBuilder">The policy builder.</param>
        /// <param name="handledEventsAllowedBeforeBreaking">The number of exceptions or handled results that are allowed before opening the circuit.</param>
        /// <param name="durationOfBreak">The duration the circuit will stay open before resetting.</param>
        /// <param name="onBreak">The action to call when the circuit transitions to an <see cref="CircuitState.Open"/> state.</param>
        /// <param name="onReset">The action to call when the circuit resets to a <see cref="CircuitState.Closed"/> state.</param>
        /// <returns>The policy instance.</returns>
        /// <remarks>(see "Release It!" by Michael T. Nygard fi)</remarks>
        /// <exception cref="System.ArgumentOutOfRangeException">handledEventsAllowedBeforeBreaking;Value must be greater than zero.</exception>
        /// <exception cref="ArgumentNullException">onBreak</exception>
        /// <exception cref="ArgumentNullException">onReset</exception>
        public static AsyncCircuitBreakerPolicy <TResult> CircuitBreakerAsync <TResult>(this PolicyBuilder <TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action <DelegateResult <TResult>, TimeSpan, Context> onBreak, Action <Context> onReset)
        {
            Action doNothingOnHalfOpen = () => { };

            return(policyBuilder.CircuitBreakerAsync(
                       handledEventsAllowedBeforeBreaking,
                       durationOfBreak,
                       onBreak,
                       onReset,
                       doNothingOnHalfOpen
                       ));
        }
        /// <summary>
        /// <para> Builds a <see cref="AsyncPolicy{TResult}"/> that will function like a Circuit Breaker.</para>
        /// <para>The circuit will break if <paramref name="handledEventsAllowedBeforeBreaking"/>
        /// exceptions or results that are handled by this policy are encountered consecutively. </para>
        /// <para>The circuit will stay broken for the <paramref name="durationOfBreak"/>. Any attempt to execute this policy
        /// while the circuit is broken, will immediately throw a <see cref="BrokenCircuitException"/> containing the exception or result
        /// that broke the circuit.
        /// </para>
        /// <para>If the first action after the break duration period results in a handled exception or result, the circuit will break
        /// again for another <paramref name="durationOfBreak"/>; if no exception or handled result is encountered, the circuit will reset.
        /// </para>
        /// </summary>
        /// <param name="policyBuilder">The policy builder.</param>
        /// <param name="handledEventsAllowedBeforeBreaking">The number of exceptions or handled results that are allowed before opening the circuit.</param>
        /// <param name="durationOfBreak">The duration the circuit will stay open before resetting.</param>
        /// <returns>The policy instance.</returns>
        /// <remarks>(see "Release It!" by Michael T. Nygard fi)</remarks>
        /// <exception cref="System.ArgumentOutOfRangeException">handledEventsAllowedBeforeBreaking;Value must be greater than zero.</exception>
        public static AsyncCircuitBreakerPolicy <TResult> CircuitBreakerAsync <TResult>(this PolicyBuilder <TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak)
        {
            Action <DelegateResult <TResult>, TimeSpan> doNothingOnBreak = (_, __) => { };
            Action doNothingOnReset = () => { };

            return(policyBuilder.CircuitBreakerAsync(
                       handledEventsAllowedBeforeBreaking,
                       durationOfBreak,
                       doNothingOnBreak,
                       doNothingOnReset
                       ));
        }