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

CompositeComponent

A combination of multiple components.
using Polly.Telemetry; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Threading.Tasks; namespace Polly.Utils.Pipeline { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] [DebuggerDisplay("Pipeline, Strategies = {Components.Count}")] [DebuggerTypeProxy(typeof(CompositeComponentDebuggerProxy))] internal sealed class CompositeComponent : PipelineComponent { private readonly ResilienceStrategyTelemetry _telemetry; private readonly TimeProvider _timeProvider; internal PipelineComponent FirstComponent { get; } public IReadOnlyList<PipelineComponent> Components { get; } private CompositeComponent(PipelineComponent first, IReadOnlyList<PipelineComponent> components, ResilienceStrategyTelemetry telemetry, TimeProvider timeProvider) { Components = components; _telemetry = telemetry; _timeProvider = timeProvider; FirstComponent = first; } public static PipelineComponent Create(IReadOnlyList<PipelineComponent> components, ResilienceStrategyTelemetry telemetry, TimeProvider timeProvider) { if (components.Count == 1) return new CompositeComponent(components[0], components, telemetry, timeProvider); List<DelegatingComponent> list = (from strategy in components.Take(components.Count - 1) select new DelegatingComponent(strategy)).ToList(); List<DelegatingComponent> list2 = list; list2[list2.Count - 1].Next = components[components.Count - 1]; for (int i = 0; i < list.Count - 1; i++) { list[i].Next = list[i + 1]; } return new CompositeComponent(list[0], components, telemetry, timeProvider); } [AsyncStateMachine(typeof(<DisposeAsync>d__10))] public override ValueTask DisposeAsync() { <DisposeAsync>d__10 stateMachine = default(<DisposeAsync>d__10); stateMachine.<>t__builder = AsyncValueTaskMethodBuilder.Create(); stateMachine.<>4__this = this; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 0, 1 })] internal override ValueTask<Outcome<TResult>> ExecuteCore<[System.Runtime.CompilerServices.Nullable(2)] TResult, [System.Runtime.CompilerServices.Nullable(2)] TState>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 1, 1, 0, 0, 1 })] Func<ResilienceContext, TState, ValueTask<Outcome<TResult>>> callback, ResilienceContext context, TState state) { if (!_telemetry.Enabled) return ExecuteCoreWithoutTelemetry(callback, context, state); return ExecuteCoreWithTelemetry(callback, context, state); } [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 0, 1 })] private ValueTask<Outcome<TResult>> ExecuteCoreWithoutTelemetry<[System.Runtime.CompilerServices.Nullable(2)] TResult, [System.Runtime.CompilerServices.Nullable(2)] TState>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 1, 1, 0, 0, 1 })] Func<ResilienceContext, TState, ValueTask<Outcome<TResult>>> callback, ResilienceContext context, TState state) { if (context.CancellationToken.IsCancellationRequested) return Outcome.FromExceptionAsValueTask<TResult>(new OperationCanceledException(context.CancellationToken).TrySetStackTrace()); return FirstComponent.ExecuteCore(callback, context, state); } [AsyncStateMachine(typeof(<ExecuteCoreWithTelemetry>d__13<, >))] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 0, 1 })] private ValueTask<Outcome<TResult>> ExecuteCoreWithTelemetry<[System.Runtime.CompilerServices.Nullable(2)] TResult, [System.Runtime.CompilerServices.Nullable(2)] TState>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 1, 1, 0, 0, 1 })] Func<ResilienceContext, TState, ValueTask<Outcome<TResult>>> callback, ResilienceContext context, TState state) { <ExecuteCoreWithTelemetry>d__13<TResult, TState> stateMachine = default(<ExecuteCoreWithTelemetry>d__13<TResult, TState>); stateMachine.<>t__builder = AsyncValueTaskMethodBuilder<Outcome<TResult>>.Create(); stateMachine.<>4__this = this; stateMachine.callback = callback; stateMachine.context = context; stateMachine.state = state; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } } }