{"record":{"id":"5f0be8d0c3125b06","repo":"dotnet/reactive","slug":"new-argumentnullexception-nameof-observer","errorCode":null,"errorMessage":"new ArgumentNullException(nameof(observer))","messagePattern":"new ArgumentNullException\\(nameof\\(observer\\)\\)","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"AsyncRx.NET/System.Reactive.Async/Linq/Operators/Generate.cs","lineNumber":348,"sourceCode":"        {\n            if (observer == null)\n                throw new ArgumentNullException(nameof(observer));\n            if (condition == null)\n                throw new ArgumentNullException(nameof(condition));\n            if (iterate == null)\n                throw new ArgumentNullException(nameof(iterate));\n            if (resultSelector == null)\n                throw new ArgumentNullException(nameof(resultSelector));\n            if (timeSelector == null)\n                throw new ArgumentNullException(nameof(timeSelector));\n\n            return Generate(observer, initialState, condition, iterate, resultSelector, timeSelector, TaskPoolAsyncScheduler.Default);\n        }\n\n        public static ValueTask<IAsyncDisposable> Generate<TState, TResult>(IAsyncObserver<TResult> observer, TState initialState, Func<TState, ValueTask<bool>> condition, Func<TState, ValueTask<TState>> iterate, Func<TState, ValueTask<TResult>> resultSelector, Func<TState, ValueTask<TimeSpan>> timeSelector, IAsyncScheduler scheduler)\n        {\n            if (observer == null)\n                throw new ArgumentNullException(nameof(observer));\n            if (condition == null)\n                throw new ArgumentNullException(nameof(condition));\n            if (iterate == null)\n                throw new ArgumentNullException(nameof(iterate));\n            if (resultSelector == null)\n                throw new ArgumentNullException(nameof(resultSelector));\n            if (timeSelector == null)\n                throw new ArgumentNullException(nameof(timeSelector));\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));\n\n            return scheduler.ScheduleAsync(async ct =>\n            {\n                var first = true;\n                var state = initialState;\n\n                while (!ct.IsCancellationRequested)\n                {","sourceCodeStart":330,"sourceCodeEnd":366,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/AsyncRx.NET/System.Reactive.Async/Linq/Operators/Generate.cs#L330-L366","documentation":"The explicit-scheduler Generate overload's first validation throws ArgumentNullException(nameof(observer)) when the IAsyncObserver<TResult> argument is null. This overload performs all delegate and scheduler checks itself (no shorter overload delegates to it with defaults for observer).","triggerScenarios":"Generate(null, initialState, condition, iterate, resultSelector, timeSelector, scheduler).","commonSituations":"Observer supplied by a factory or DI container that returned null; tests constructing the pipeline before creating the observer.","solutions":["Pass a concrete IAsyncObserver<TResult> instance to Generate.","Assert/require the observer in your composition code before building the operator pipeline.","Fix the upstream factory/DI registration that produces a null observer."],"exampleFix":"// before\nawait Generate(observerOrNull, 0, cond, iterate, select, timing, scheduler);\n// after\nif (observer == null) throw new InvalidOperationException(\"Observer not initialized\");\nawait Generate(observer, 0, cond, iterate, select, timing, scheduler);","handlingStrategy":"validation","validationCode":"if (observer == null) throw new InvalidOperationException(\"Observer not initialized\");","typeGuard":"bool HasObserver<TResult>(IAsyncObserver<TResult> o) => o != null;","tryCatchPattern":"try { await Generate(observer, state, cond, iterate, select, timing, scheduler); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"observer\") { /* rebuild observer and retry once */ }","preventionTips":["Resolve/create the observer before pipeline construction","Add constructor guard clauses so observer fields can never be null","Check DI container registrations for observer implementations"],"tags":["argument-null","observer","generate-operator"],"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"}