{"record":{"id":"8ee5900bbe2a57e3","repo":"dotnet/reactive","slug":"argument-cannot-be-null-parameter-name-scheduler","errorCode":null,"errorMessage":"Argument cannot be null (Parameter name: scheduler)","messagePattern":"Argument cannot be null \\(Parameter name: scheduler\\)","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"AsyncRx.NET/System.Reactive.Async/Linq/Operators/FromAsync.cs","lineNumber":26,"sourceCode":"\nnamespace System.Reactive.Linq\n{\n    public partial class AsyncObservable\n    {\n        public static IAsyncObservable<TResult> FromAsync<TResult>(Func<ValueTask<TResult>> functionAsync)\n        {\n            if (functionAsync == null)\n                throw new ArgumentNullException(nameof(functionAsync));\n\n            return Defer(() => StartAsync(functionAsync));\n        }\n\n        public static IAsyncObservable<TResult> FromAsync<TResult>(Func<ValueTask<TResult>> functionAsync, IAsyncScheduler scheduler)\n        {\n            if (functionAsync == null)\n                throw new ArgumentNullException(nameof(functionAsync));\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));\n\n            return Defer(() => StartAsync(functionAsync, scheduler));\n        }\n\n        public static IAsyncObservable<TResult> FromAsync<TResult>(Func<CancellationToken, ValueTask<TResult>> functionAsync)\n        {\n            if (functionAsync == null)\n                throw new ArgumentNullException(nameof(functionAsync));\n\n            return Defer(() => StartAsync(functionAsync));\n        }\n\n        public static IAsyncObservable<TResult> FromAsync<TResult>(Func<CancellationToken, ValueTask<TResult>> functionAsync, IAsyncScheduler scheduler)\n        {\n            if (functionAsync == null)\n                throw new ArgumentNullException(nameof(functionAsync));\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));","sourceCodeStart":8,"sourceCodeEnd":44,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/AsyncRx.NET/System.Reactive.Async/Linq/Operators/FromAsync.cs#L8-L44","documentation":"The scheduler-based FromAsync overload throws ArgumentNullException when scheduler is null. FromAsync requires an explicit IAsyncScheduler whenever the two-argument overload is chosen; passing null bypasses the overload's purpose (controlling where the async function runs) and is rejected synchronously.","triggerScenarios":"Calling AsyncObservable.FromAsync(fn, null) where the scheduler comes from an injectable property, a resolver, or DefaultAsyncScheduler.Instance shadowed by a null field.","commonSituations":"DI container failing to register IAsyncScheduler so injection yields null; scheduler set later than first use; environment-specific scheduler initialization that was skipped in tests.","solutions":["Pass a concrete scheduler, e.g. AsyncObservable.FromAsync(fn, DefaultAsyncScheduler.Instance).","Or use the single-argument overload FromAsync(fn), which schedules with the library default.","Ensure IAsyncScheduler is registered/initialized before building the observable."],"exampleFix":"// before\nIAsyncScheduler scheduler = serviceProvider.GetService<IAsyncScheduler>(); // null\nvar obs = AsyncObservable.FromAsync(fn, scheduler);\n// after\nvar obs = AsyncObservable.FromAsync(fn, DefaultAsyncScheduler.Instance);","handlingStrategy":"validation","validationCode":"// C#\nvar scheduler = injectedScheduler ?? DefaultAsyncScheduler.Instance;\nvar obs = AsyncObservable.FromAsync(functionAsync, scheduler);","typeGuard":"static bool HasScheduler(IAsyncScheduler s) => s != null;","tryCatchPattern":"try { var obs = AsyncObservable.FromAsync(fn, scheduler); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"scheduler\") { /* use DefaultAsyncScheduler.Instance */ }","preventionTips":["Register IAsyncScheduler in the DI container and require it (GetRequiredService).","Coalesce null injected schedulers with DefaultAsyncScheduler.Instance.","Initialize schedulers before any observable composition runs."],"tags":["csharp","argument-null","async-rx","fromasync","scheduler"],"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"}