App-vNext/Polly · error · ArgumentNullException

Value cannot be null.

Error message

Value cannot be null.

What it means

Thrown by ResiliencePipelineConversionExtensions.AsAsyncPolicy(this ResiliencePipeline strategy) when strategy is null. The extension converts a v8 ResiliencePipeline into a legacy IAsyncPolicy adapter; a null pipeline cannot be wrapped.

Source

Thrown at src/Polly/ResiliencePipelineConversionExtensions.cs:17

using Polly.Utilities.Wrappers;

namespace Polly;

/// <summary>
/// Extensions for conversion of resilience strategies to policies.
/// </summary>
public static class ResiliencePipelineConversionExtensions
{
    /// <summary>
    /// Converts a <see cref="ResiliencePipeline"/> to an <see cref="IAsyncPolicy"/>.
    /// </summary>
    /// <param name="strategy">The strategy instance.</param>
    /// <returns>An instance of <see cref="IAsyncPolicy"/>.</returns>
    /// <exception cref="ArgumentNullException">Thrown when <paramref name="strategy"/> is <see langword="null"/>.</exception>
    public static IAsyncPolicy AsAsyncPolicy(this ResiliencePipeline strategy)
        => new ResiliencePipelineAsyncPolicy(strategy ?? throw new ArgumentNullException(nameof(strategy)));

    /// <summary>
    /// Converts a <see cref="ResiliencePipeline{TResult}"/> to an <see cref="IAsyncPolicy{TResult}"/>.
    /// </summary>
    /// <typeparam name="TResult">The type of the result.</typeparam>
    /// <param name="strategy">The strategy instance.</param>
    /// <returns>An instance of <see cref="IAsyncPolicy{TResult}"/>.</returns>
    /// <exception cref="ArgumentNullException">Thrown when <paramref name="strategy"/> is <see langword="null"/>.</exception>
    public static IAsyncPolicy<TResult> AsAsyncPolicy<TResult>(this ResiliencePipeline<TResult> strategy)
        => new ResiliencePipelineAsyncPolicy<TResult>(strategy ?? throw new ArgumentNullException(nameof(strategy)));

    /// <summary>
    /// Converts a <see cref="ResiliencePipeline"/> to an <see cref="ISyncPolicy"/>.
    /// </summary>
    /// <param name="strategy">The strategy instance.</param>
    /// <returns>An instance of <see cref="ISyncPolicy"/>.</returns>
    /// <exception cref="ArgumentNullException">Thrown when <paramref name="strategy"/> is <see langword="null"/>.</exception>
    public static ISyncPolicy AsSyncPolicy(this ResiliencePipeline strategy)

View on GitHub (pinned to d0e46bdb1e)

Solutions

  1. Build the ResiliencePipeline via new ResiliencePipelineBuilder()...Build() before converting.
  2. Null-check the pipeline before calling AsAsyncPolicy.
  3. Verify DI registration of the pipeline resolves a real instance.

Example fix

// before
ResiliencePipeline pipeline = null;
var policy = pipeline.AsAsyncPolicy();
// after
var pipeline = new ResiliencePipelineBuilder().AddRetry(new RetryStrategyOptions()).Build();
var policy = pipeline.AsAsyncPolicy();
Defensive patterns

Strategy: validation

Validate before calling

if (pipeline is null) throw new InvalidOperationException("ResiliencePipeline is not built.");
var policy = pipeline.AsAsyncPolicy();

Type guard

static bool IsPipelineReady(ResiliencePipeline pipeline) => pipeline is not null;

Prevention

When it happens

Trigger: Calling ((ResiliencePipeline)null).AsAsyncPolicy() — typically when the pipeline variable was never assigned or a builder returned null.

Common situations: Migrating from legacy Polly to v8 pipelines; a pipeline built conditionally that stayed null; DI container returning null for a ResiliencePipeline registration.

Related errors


AI-assisted analysis of App-vNext/Polly@d0e46bdb1e (2026-08-13). Data as JSON: /api/errors/e3b9096ce013f4f5. Report an issue: GitHub.