<PackageReference Include="Polly.Core" Version="8.2.0" />

OutcomePipelineBuilderExtensions

Extension methods for adding outcome to a ResiliencePipelineBuilder.
using Polly.Simmy.Outcomes; using Polly.Utils; using System; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; using System.Threading.Tasks; namespace Polly.Simmy { [NullableContext(1)] [Nullable(0)] internal static class OutcomePipelineBuilderExtensions { public static ResiliencePipelineBuilder<TResult> AddChaosResult<[Nullable(2)] [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TResult>(this ResiliencePipelineBuilder<TResult> builder, double injectionRate, TResult result) { Guard.NotNull(builder, "builder"); builder.AddChaosResult(new OutcomeStrategyOptions<TResult> { Enabled = true, InjectionRate = injectionRate, OutcomeGenerator = (Func<OutcomeGeneratorArguments, ValueTask<Outcome<TResult>?>>)((OutcomeGeneratorArguments _) => new ValueTask<Outcome<TResult>?>(Task.FromResult<Outcome<TResult>?>((Outcome<TResult>?)Outcome.FromResult<TResult>(result)))) }); return builder; } public static ResiliencePipelineBuilder<TResult> AddChaosResult<[Nullable(2)] [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TResult>(this ResiliencePipelineBuilder<TResult> builder, double injectionRate, [Nullable(new byte[] { 1, 2 })] Func<TResult> resultGenerator) { Guard.NotNull(builder, "builder"); builder.AddChaosResult(new OutcomeStrategyOptions<TResult> { Enabled = true, InjectionRate = injectionRate, OutcomeGenerator = (Func<OutcomeGeneratorArguments, ValueTask<Outcome<TResult>?>>)((OutcomeGeneratorArguments _) => new ValueTask<Outcome<TResult>?>(Task.FromResult<Outcome<TResult>?>((Outcome<TResult>?)Outcome.FromResult<TResult>(resultGenerator())))) }); return builder; } [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 ResiliencePipelineBuilder<TResult> AddChaosResult<[Nullable(2)] [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TResult>(this ResiliencePipelineBuilder<TResult> builder, OutcomeStrategyOptions<TResult> options) { Guard.NotNull(builder, "builder"); Guard.NotNull(options, "options"); builder.AddStrategy((StrategyBuilderContext context) => new OutcomeChaosStrategy<TResult>(options, context.Telemetry), options); return builder; } } }