public void Should_add_with_GetOrAdd_with_value_when_no_existing_policy() { Policy newPolicy = Policy.NoOp(); string key = Guid.NewGuid().ToString(); var returnedPolicy = _registry.GetOrAdd(key, newPolicy); returnedPolicy.Should().BeSameAs(newPolicy); }
public IAsyncPolicy <HttpResponseMessage> CreateCircuitBreakerPolicy(HttpRequestMessage request) { string policyKey = $"{request.Method}-{request.RequestUri.OriginalString}-{request.Headers?.Authorization?.GetHashCode()}"; var circuitBreakerPolicy = HttpPolicyExtensions .HandleTransientHttpError() // HttpRequestException, 5XX and 408 .OrResult(response => HttpStatusCodes.WorthRetrying.Contains(response.StatusCode)) .Or <Exception>() .CircuitBreakerAsync( handledEventsAllowedBeforeBreaking: _config.ExceptionsAllowedBeforeBreaking, durationOfBreak: TimeSpan.FromSeconds(_config.DurationOnBreakInSec), onBreak: OnBreak, onReset: OnReset, onHalfOpen: OnHalfOpen ); // Separate circuit breaker policies are possible because each independent circuit must have its own policy var policyWithKey = _concurrentPolicyRegistry.GetOrAdd(policyKey, circuitBreakerPolicy); return(policyWithKey); }