dotnet/reactive · error · ArgumentNullException
Value cannot be null. (Parameter 'scheduler')
Error message
Value cannot be null. (Parameter 'scheduler')
What it means
This Repeat(value, scheduler) overload endlessly repeats a value on the given IAsyncScheduler. The library throws ArgumentNullException because the scheduler is required to schedule each emission; a null scheduler has no valid default substitution in this overload.
Solutions
- Pass a valid scheduler instance, e.g. AsyncScheduler.Default (or the library's default/immediate scheduler)
- Fix the DI/registration so the IAsyncScheduler resolves non-null
- Null-check the scheduler at the call site and substitute a default before calling Repeat
Example fix
// before var obs = AsyncObservable.Repeat(42, GetConfiguredScheduler()); // GetConfiguredScheduler() may return null // after var sched = GetConfiguredScheduler() ?? AsyncScheduler.Default; var obs = AsyncObservable.Repeat(42, sched);
Defensive patterns
Strategy: validation
Validate before calling
if (scheduler == null) scheduler = AsyncScheduler.Default; var obs = AsyncObservable.Repeat(value, scheduler);
Type guard
static bool HasScheduler(IAsyncScheduler s) => s != null;
Try / catch
try
{
var obs = AsyncObservable.Repeat(value, scheduler);
}
catch (ArgumentNullException ex) when (ex.ParamName == "scheduler")
{
var obs = AsyncObservable.Repeat(value, AsyncScheduler.Default);
} Prevention
- Centralize scheduler resolution in one helper that always returns non-null
- Prefer the parameterless Repeat(value) overload when no scheduling is required
- Register IAsyncScheduler in DI so lookups never return null
- Null-coalesce scheduler arguments at call sites: ?? AsyncScheduler.Default
When it happens
Trigger: Calling AsyncObservable.Repeat(value, scheduler) with a null scheduler, e.g. a scheduler resolved from configuration/DI that was not registered or a field never initialized.
Common situations: Scheduler resolved from a DI container that lacks a registration; passing the result of a lookup helper that returns null on failure; test code constructing schedulers conditionally.
Related errors
- ArgumentNullException
- Value cannot be null. (Parameter 'source')
- Value cannot be null. (Parameter 'source')
- source
- ArgumentNullException
AI-assisted analysis of dotnet/reactive@94b5d5ab91 (2026-09-15).
Data as JSON: /api/errors/ad5725088806c142.
Report an issue: GitHub.
Appendix: source
Thrown at AsyncRx.NET/System.Reactive.Async/Linq/Operators/Repeat.cs:23
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Concurrency;
using System.Reactive.Disposables;
using System.Threading.Tasks;
namespace System.Reactive.Linq
{
public partial class AsyncObservable
{
public static IAsyncObservable<TSource> Repeat<TSource>(TSource value)
{
return Create<TSource>(observer => AsyncObserver.Repeat(observer, value));
}
public static IAsyncObservable<TSource> Repeat<TSource>(TSource value, IAsyncScheduler scheduler)
{
if (scheduler == null)
throw new ArgumentNullException(nameof(scheduler));
return Create<TSource>(observer => AsyncObserver.Repeat(observer, value, scheduler));
}
public static IAsyncObservable<TSource> Repeat<TSource>(TSource value, int repeatCount)
{
if (repeatCount < 0)
throw new ArgumentNullException(nameof(repeatCount));
return Create<TSource>(observer => AsyncObserver.Repeat(observer, value, repeatCount));
}
public static IAsyncObservable<TSource> Repeat<TSource>(TSource value, int repeatCount, IAsyncScheduler scheduler)
{
if (repeatCount < 0)
throw new ArgumentNullException(nameof(repeatCount));
if (scheduler == null)
throw new ArgumentNullException(nameof(scheduler));View on GitHub (pinned to 94b5d5ab91)