Phase 27 of 30 · Topic 27.3

Polly v8 Resilience Pipelines (Retry with Exponential Backoff + Jitter)

1Concept

Polly v8 introduces zero-allocation `ResiliencePipeline`. Retries with exponential backoff and randomized jitter prevent the Thundering Herd problem when recovering from downstream outages.

2Architecture Diagram

Transient Network Error
       │
   Retry 1 (100ms + Jitter)
       │ (Fails)
   Retry 2 (200ms + Jitter)
       │ (Fails)
   Retry 3 (400ms + Jitter) ──> Success! (Recovered automatically)

3Code Example

C# 13 & .NET 9
using System;

public class PollyResilienceConceptDemo
{
    public static void Main()
    {
        Console.WriteLine("Polly v8 Resilience Pipeline:");
        Console.WriteLine("var pipeline = new ResiliencePipelineBuilder()");
        Console.WriteLine("    .AddRetry(new RetryStrategyOptions {");
        Console.WriteLine("        MaxRetryAttempts = 3,");
        Console.WriteLine("        Delay = TimeSpan.FromMilliseconds(200),");
        Console.WriteLine("        BackoffType = DelayBackoffType.Exponential,");
        Console.WriteLine("        UseJitter = true");
        Console.WriteLine("    })");
        Console.WriteLine("    .Build();");
    }
}

4Expected Output

Polly v8 Resilience Pipeline:
var pipeline = new ResiliencePipelineBuilder()
    .AddRetry(new RetryStrategyOptions {
        MaxRetryAttempts = 3,
        Delay = TimeSpan.FromMilliseconds(200),
        BackoffType = DelayBackoffType.Exponential,
        UseJitter = true
    })
    .Build();

5Key Takeaways

  • Polly v8 is redesigned from the ground up for zero heap allocations.
  • Always enable `UseJitter = true` to spread retry waves evenly across servers.
  • Integrate with `IHttpClientFactory.AddResilienceHandler()` in .NET 8/9.