{"record":{"id":"358c095a9e8a277a","repo":"Cysharp/UniTask","slug":"observer","errorCode":null,"errorMessage":"observer","messagePattern":"observer","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskObservableExtensions.cs","lineNumber":457,"sourceCode":"\n            old.OnError(error);\n        }\n\n        public void OnNext(T value)\n        {\n            lock (observerLock)\n            {\n                ThrowIfDisposed();\n                if (isStopped) return;\n\n                this.hasValue = true;\n                this.lastValue = value;\n            }\n        }\n\n        public IDisposable Subscribe(IObserver<T> observer)\n        {\n            if (observer == null) throw new ArgumentNullException(\"observer\");\n\n            var ex = default(Exception);\n            var v = default(T);\n            var hv = false;\n\n            lock (observerLock)\n            {\n                ThrowIfDisposed();\n                if (!isStopped)\n                {\n                    var listObserver = outObserver as ListObserver<T>;\n                    if (listObserver != null)\n                    {\n                        outObserver = listObserver.Add(observer);\n                    }\n                    else\n                    {\n                        var current = outObserver;","sourceCodeStart":439,"sourceCodeEnd":475,"githubUrl":"https://github.com/Cysharp/UniTask/blob/ceac8d6946b1125fe782cd171fbcb245b567dbf9/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskObservableExtensions.cs#L439-L475","documentation":"Thrown by AsyncSubject<T>.Subscribe(IObserver<T>) (line 457) when the observer argument is null. Reactive Extensions require a non-null observer for every subscription, so UniTask enforces it with ArgumentNullException(\"observer\"). This Subscribe is what runs when a caller subscribes to the observable produced by ToObservable().","triggerScenarios":"Calling .Subscribe(null) on the observable returned by ToObservable(), or passing an observer variable/expression that evaluated to null (a failed factory, a null-coalescing that returned null, or an accidental null lambda).","commonSituations":"Passing null in place of an observer; relying on an optional OnNext argument that defaulted to null; a Subscribe overload where the wrong slot was left null.","solutions":["Pass a non-null IObserver<T> (or valid OnNext/OnError handler lambdas).","If you only want the value, use observable.ToUniTask() instead of a raw observer.","Null-check the observer before calling Subscribe."],"exampleFix":"// before\nobservable.Subscribe(null); // throws ArgumentNullException\n\n// after\nobservable.Subscribe(x => Handle(x), ex => Log(ex));\n// or simply:\nvar value = await observable.ToUniTask();","handlingStrategy":"validation","validationCode":"if (observer == null) throw new ArgumentNullException(nameof(observer));\nobservable.Subscribe(observer);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always supply explicit OnNext/OnError handler lambdas rather than relying on optional args.","Prefer the UniTask bridge (.ToUniTask()) when you do not need a long-lived observer.","Null-check observer variables produced by factories before subscribing."],"tags":["observable","argumentnullexception","unitask","subscription","validation"],"backgroundTag":null,"analyzedSha":"ceac8d6946b1125fe782cd171fbcb245b567dbf9","analyzedAt":"2026-08-13T19:16:39.025Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}