HedgingCompositeStrategyBuilderExtensions
Provides extension methods for configuring hedging resilience strategies for CompositeStrategyBuilder.
using Polly.Hedging;
using Polly.Hedging.Utils;
using Polly.Utils;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
namespace Polly
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public static class HedgingCompositeStrategyBuilderExtensions
{
[UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "All options members preserved.")]
public static CompositeStrategyBuilder<TResult> AddHedging<[System.Runtime.CompilerServices.Nullable(2)] [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TResult>(this CompositeStrategyBuilder<TResult> builder, HedgingStrategyOptions<TResult> options)
{
Guard.NotNull(builder, "builder");
Guard.NotNull(options, "options");
return builder.AddStrategy((StrategyBuilderContext context) => HedgingCompositeStrategyBuilderExtensions.CreateHedgingStrategy<TResult>(context, options, true), options);
}
[UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "All options members preserved.")]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(HedgingStrategyOptions))]
internal static CompositeStrategyBuilder AddHedging(this CompositeStrategyBuilder builder, HedgingStrategyOptions options)
{
Guard.NotNull(builder, "builder");
Guard.NotNull(options, "options");
return builder.AddStrategy((StrategyBuilderContext context) => CreateHedgingStrategy(context, options, false), options);
}
private static HedgingResilienceStrategy<TResult> CreateHedgingStrategy<[System.Runtime.CompilerServices.Nullable(2)] TResult>(StrategyBuilderContext context, HedgingStrategyOptions<TResult> options, bool isGeneric)
{
HedgingHandler<TResult> hedgingHandler = new HedgingHandler<TResult>(options.ShouldHandle, options.HedgingActionGenerator, isGeneric);
return new HedgingResilienceStrategy<TResult>(options.HedgingDelay, options.MaxHedgedAttempts, hedgingHandler, options.OnHedging, options.HedgingDelayGenerator, context.TimeProvider, context.Telemetry);
}
}
}