{"record":{"id":"ad5725088806c142","repo":"dotnet/reactive","slug":"value-cannot-be-null-parameter-scheduler-repeat","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'scheduler')","messagePattern":"Value cannot be null\\. \\(Parameter 'scheduler'\\)","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"AsyncRx.NET/System.Reactive.Async/Linq/Operators/Repeat.cs","lineNumber":23,"sourceCode":"using System.Collections.Generic;\nusing System.Linq;\nusing System.Reactive.Concurrency;\nusing System.Reactive.Disposables;\nusing System.Threading.Tasks;\n\nnamespace System.Reactive.Linq\n{\n    public partial class AsyncObservable\n    {\n        public static IAsyncObservable<TSource> Repeat<TSource>(TSource value)\n        {\n            return Create<TSource>(observer => AsyncObserver.Repeat(observer, value));\n        }\n\n        public static IAsyncObservable<TSource> Repeat<TSource>(TSource value, IAsyncScheduler scheduler)\n        {\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));\n\n            return Create<TSource>(observer => AsyncObserver.Repeat(observer, value, scheduler));\n        }\n\n        public static IAsyncObservable<TSource> Repeat<TSource>(TSource value, int repeatCount)\n        {\n            if (repeatCount < 0)\n                throw new ArgumentNullException(nameof(repeatCount));\n\n            return Create<TSource>(observer => AsyncObserver.Repeat(observer, value, repeatCount));\n        }\n\n        public static IAsyncObservable<TSource> Repeat<TSource>(TSource value, int repeatCount, IAsyncScheduler scheduler)\n        {\n            if (repeatCount < 0)\n                throw new ArgumentNullException(nameof(repeatCount));\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));","sourceCodeStart":5,"sourceCodeEnd":41,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/AsyncRx.NET/System.Reactive.Async/Linq/Operators/Repeat.cs#L5-L41","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nvar obs = AsyncObservable.Repeat(42, GetConfiguredScheduler()); // GetConfiguredScheduler() may return null\n// after\nvar sched = GetConfiguredScheduler() ?? AsyncScheduler.Default;\nvar obs = AsyncObservable.Repeat(42, sched);","handlingStrategy":"validation","validationCode":"if (scheduler == null) scheduler = AsyncScheduler.Default;\nvar obs = AsyncObservable.Repeat(value, scheduler);","typeGuard":"static bool HasScheduler(IAsyncScheduler s) => s != null;","tryCatchPattern":"try\n{\n    var obs = AsyncObservable.Repeat(value, scheduler);\n}\ncatch (ArgumentNullException ex) when (ex.ParamName == \"scheduler\")\n{\n    var obs = AsyncObservable.Repeat(value, AsyncScheduler.Default);\n}","preventionTips":["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"],"tags":["csharp","null-check","scheduler","argument-validation"],"backgroundTag":"null-argument","analyzedSha":"94b5d5ab912789f5abe9a72138a25bbd716fe59c","analyzedAt":"2026-09-15T02:26:24.759Z","contentChangedAt":"2026-09-15T02:26:24.759Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}