{"record":{"id":"f0a46eff0cd9337c","repo":"dotnet/reactive","slug":"throw-new-argumentnullexception-nameof-source-takewhile","errorCode":null,"errorMessage":"throw new ArgumentNullException(nameof(source));","messagePattern":"throw new ArgumentNullException\\(nameof\\(source\\)\\);","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"AsyncRx.NET/System.Reactive.Async/Linq/Operators/TakeWhile.cs","lineNumber":27,"sourceCode":"    public partial class AsyncObservable\n    {\n        public static IAsyncObservable<TSource> TakeWhile<TSource>(this IAsyncObservable<TSource> source, Func<TSource, bool> predicate)\n        {\n            if (source == null)\n                throw new ArgumentNullException(nameof(source));\n            if (predicate == null)\n                throw new ArgumentNullException(nameof(predicate));\n\n            return CreateAsyncObservable<TSource>.From(\n                source,\n                predicate,\n                static (source, predicate, observer) => source.SubscribeSafeAsync(AsyncObserver.TakeWhile(observer, predicate)));\n        }\n\n        public static IAsyncObservable<TSource> TakeWhile<TSource>(this IAsyncObservable<TSource> source, Func<TSource, ValueTask<bool>> predicate)\n        {\n            if (source == null)\n                throw new ArgumentNullException(nameof(source));\n            if (predicate == null)\n                throw new ArgumentNullException(nameof(predicate));\n\n            return CreateAsyncObservable<TSource>.From(\n                source,\n                predicate,\n                static (source, predicate, observer) => source.SubscribeSafeAsync(AsyncObserver.TakeWhile(observer, predicate)));\n        }\n\n        public static IAsyncObservable<TSource> TakeWhile<TSource>(this IAsyncObservable<TSource> source, Func<TSource, int, bool> predicate)\n        {\n            if (source == null)\n                throw new ArgumentNullException(nameof(source));\n            if (predicate == null)\n                throw new ArgumentNullException(nameof(predicate));\n\n            return CreateAsyncObservable<TSource>.From(\n                source,","sourceCodeStart":9,"sourceCodeEnd":45,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/AsyncRx.NET/System.Reactive.Async/Linq/Operators/TakeWhile.cs#L9-L45","documentation":"The async TakeWhile(source, predicate) overload throws ArgumentNullException because the source observable argument was null. This overload accepts a Func<TSource, ValueTask<bool>> predicate for asynchronous filtering, but the source is still validated first at operator-construction time. The exception message names 'source'.","triggerScenarios":"Calling AsyncObservable.TakeWhile(null, asyncPredicate) where asyncPredicate is a Func<TSource, ValueTask<bool>>.","commonSituations":"Async data pipelines where an upstream await returned null instead of a stream; factory methods that return null on empty results; DI-resolved observables that were not registered.","solutions":["Coalesce the source: (source ?? AsyncObservable.Empty<TSource>()).TakeWhile(asyncPredicate).","Fix the upstream factory to return a non-null (possibly empty) observable.","Guard the composition point with a null check and a meaningful application-level error."],"exampleFix":"// before\nvar taken = source.TakeWhile(async x => await CheckAsync(x));\n// after\nvar taken = (source ?? AsyncObservable.Empty<int>()).TakeWhile(async x => await CheckAsync(x));","handlingStrategy":"validation","validationCode":"if (source == null) source = AsyncObservable.Empty<TSource>();","typeGuard":"bool HasSource<T>(IAsyncObservable<T>? s) => s is not null;","tryCatchPattern":"try { var taken = source.TakeWhile(asyncPredicate); } catch (ArgumentNullException ex) when (ex.ParamName == \"source\") { var taken = AsyncObservable.Empty<TSource>(); }","preventionTips":["Await all upstream factories before composing; never pass a possibly-null awaited result.","Make async stream producers return empty observables rather than null.","Add an argument guard at the entry point of custom async pipelines."],"tags":["argument-null","reactive-extensions","takewhile","async"],"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"}