{"record":{"id":"6473ba90c9020fd6","repo":"dotnet/reactive","slug":"function","errorCode":null,"errorMessage":"function","messagePattern":"function","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"AsyncRx.NET/System.Reactive.Async/Linq/Operators/Start.cs","lineNumber":14,"sourceCode":"﻿// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT License.\n// See the LICENSE file in the project root for more information. \n\nusing System.Reactive.Concurrency;\n\nnamespace System.Reactive.Linq\n{\n    public partial class AsyncObservable\n    {\n        public static IAsyncObservable<TSource> Start<TSource>(Func<TSource> function)\n        {\n            if (function == null)\n                throw new ArgumentNullException(nameof(function));\n\n            return ToAsync(function)();\n        }\n\n        public static IAsyncObservable<TSource> Start<TSource>(Func<TSource> function, IAsyncScheduler scheduler)\n        {\n            if (function == null)\n                throw new ArgumentNullException(nameof(function));\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));\n\n            return ToAsync(function, scheduler)();\n        }\n\n        public static IAsyncObservable<Unit> Start(Action action)\n        {\n            if (action == null)\n                throw new ArgumentNullException(nameof(action));","sourceCodeStart":1,"sourceCodeEnd":32,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/AsyncRx.NET/System.Reactive.Async/Linq/Operators/Start.cs#L1-L32","documentation":"Start throws ArgumentNullException when the function argument is null. Start converts a synchronous Func<TSource> into an async observable and invokes it (via ToAsync) on a scheduler, so it requires a real delegate to execute.","triggerScenarios":"Calling AsyncObservable.Start<TSource>((Func<TSource>)null).","commonSituations":"A delegate field or config-selected function was never assigned; passing a null Action/Func variable created for conditional execution.","solutions":["Pass a valid Func<TSource>, e.g. () => ComputeValue()","Null-check the function variable before calling Start","Fix the code path that was supposed to assign the function"],"exampleFix":"// before\nFunc<int> fn = null;\nvar obs = AsyncObservable.Start(fn);\n// after\nvar obs = AsyncObservable.Start(() => ComputeValue());","handlingStrategy":"validation","validationCode":"if (function == null) throw new ArgumentNullException(nameof(function));","typeGuard":"bool IsValid<TSource>(Func<TSource> f) => f != null;","tryCatchPattern":"try { var obs = AsyncObservable.Start(fn); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"function\") { /* supply function */ }","preventionTips":["Pass inline lambdas to Start rather than nullable delegate variables","Enable NRT so unassigned Func fields are compile-time warnings"],"tags":["csharp","argument-null","reactive-extensions"],"backgroundTag":"null-argument","analyzedSha":"94b5d5ab912789f5abe9a72138a25bbd716fe59c","analyzedAt":"2026-09-15T02:26:24.759Z","contentChangedAt":"2026-09-15T02:26:24.759Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}