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
- Build the ResiliencePipeline via new ResiliencePipelineBuilder()...Build() before converting.
- Null-check the pipeline before calling AsAsyncPolicy.
- 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
- Build the pipeline with ResiliencePipelineBuilder.Build() before converting.
- Register ResiliencePipeline in DI as a singleton so it is always resolved.
- Enable nullable reference types to catch null pipelines at compile time.
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.