/// <summary> /// Initialises a new Throttle class with a nested resiliency pattern invoker. /// </summary> /// <param name="limit">The maximum concurrent executions.</param> /// <param name="nestedInvoker">The invoker to pass the command onto.</param> public Throttle(int limit, ResiliencyCommandInvoker nestedInvoker) { if (limit < 1) { throw new ArgumentOutOfRangeException("limit", "The limit cannot be less than one."); } this.semaphore = new SemaphoreSuperSlim(limit); this.invoker = nestedInvoker; }
public void TestInitialize() { this.stateMachine = new Mock <CircuitBreakerStateMachine>(); this.settings = new CircuitBreakerSettings(); this.invoker = new InnerCommandInvoker(); this.parameters = new CircuitBreakerStateParameters { stateMachine = this.stateMachine.Object, settings = this.settings, invoker = this.invoker }; }
/// <summary> /// Initialises a new circuit breaker using the supplied settings with a nested resiliency pattern invoker. /// </summary> /// <param name="settings">Settings to configure the circuit breaker.</param> /// <param name="nestedInvoker">The invoker to pass the command onto.</param> public CircuitBreaker(CircuitBreakerSettings settings, ResiliencyCommandInvoker nestedInvoker) { if (settings == null) { settings = new CircuitBreakerSettings(); } var parameters = new CircuitBreakerStateParameters { settings = settings, invoker = nestedInvoker }; this.stateMachine = new CircuitBreakerStateMachineImpl(new CircuitBreakerStateNormal(parameters)); parameters.stateMachine = this.stateMachine; this.AttachToStateChangeEvent(); }