CircuitBreakerStrategyOptions<TResult>
The options for circuit breaker resilience strategy.
using Polly.Utils;
using System;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
namespace Polly.CircuitBreaker
{
[System.Runtime.CompilerServices.NullableContext(2)]
[System.Runtime.CompilerServices.Nullable(0)]
public class CircuitBreakerStrategyOptions<TResult> : ResilienceStrategyOptions
{
[Range(0, 1)]
public double FailureRatio { get; set; } = 0.1;
[Range(2, int.MaxValue)]
public int MinimumThroughput { get; set; } = 100;
[Range(typeof(TimeSpan), "00:00:00.500", "1.00:00:00")]
[System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Addressed with DynamicDependency on ValidationHelper.Validate method")]
public TimeSpan SamplingDuration { get; set; } = CircuitBreakerConstants.DefaultSamplingDuration;
[Range(typeof(TimeSpan), "00:00:00.500", "1.00:00:00")]
[System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Addressed with DynamicDependency on ValidationHelper.Validate method")]
public TimeSpan BreakDuration { get; set; } = CircuitBreakerConstants.DefaultBreakDuration;
[System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0
})]
[field: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0
})]
public Func<BreakDurationGeneratorArguments, ValueTask<TimeSpan>> BreakDurationGenerator {
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0
})]
get;
[param: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0
})]
set;
}
[System.Runtime.CompilerServices.Nullable(new byte[] {
1,
0,
1,
0
})]
[Required]
[field: System.Runtime.CompilerServices.Nullable(new byte[] {
1,
0,
1,
0
})]
public Func<CircuitBreakerPredicateArguments<TResult>, ValueTask<bool>> ShouldHandle {
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
1,
0,
1,
0
})]
get;
[param: System.Runtime.CompilerServices.Nullable(new byte[] {
1,
0,
1,
0
})]
set;
} = DefaultPredicates<CircuitBreakerPredicateArguments<TResult>, TResult>.HandleOutcome;
[System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
1
})]
[field: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
1
})]
public Func<OnCircuitClosedArguments<TResult>, ValueTask> OnClosed {
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
1
})]
get;
[param: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
1
})]
set;
}
[System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
1
})]
[field: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
1
})]
public Func<OnCircuitOpenedArguments<TResult>, ValueTask> OnOpened {
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
1
})]
get;
[param: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
1
})]
set;
}
public Func<OnCircuitHalfOpenedArguments, ValueTask> OnHalfOpened { get; set; }
public CircuitBreakerManualControl ManualControl { get; set; }
public CircuitBreakerStateProvider StateProvider { get; set; }
public CircuitBreakerStrategyOptions()
{
base.Name = "CircuitBreaker";
}
}
}