{"record":{"id":"eef383c3280587c1","repo":"dotnet/reactive","slug":"no-elements","errorCode":null,"errorMessage":"NO_ELEMENTS","messagePattern":"NO_ELEMENTS","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"Rx.NET/Source/src/System.Reactive/Linq/Observable/SingleAsync.cs","lineNumber":57,"sourceCode":"                        }\n                        catch (Exception e)\n                        {\n                            ForwardOnError(e);\n                        }\n                        return;\n                    }\n\n                    _value = value;\n                    _seenValue = true;\n                }\n\n                public override void OnCompleted()\n                {\n                    if (!_seenValue)\n                    {\n                        try\n                        {\n                            throw new InvalidOperationException(Strings_Linq.NO_ELEMENTS);\n                        }\n                        catch (Exception e)\n                        {\n                            ForwardOnError(e);\n                        }\n                    }\n                    else\n                    {\n                        ForwardOnNext(_value!);\n                        ForwardOnCompleted();\n                    }\n                }\n            }\n        }\n\n        internal sealed class Predicate : Producer<TSource, Predicate._>\n        {\n            private readonly IObservable<TSource> _source;","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Source/src/System.Reactive/Linq/Observable/SingleAsync.cs#L39-L75","documentation":"SingleAsync also requires at least one element: if OnCompleted arrives with no value ever seen, it throws InvalidOperationException(Strings_Linq.NO_ELEMENTS) forwarded via OnError. This matches LINQ Single() throwing on an empty sequence.","triggerScenarios":"source.SingleAsync() on a stream that completes without emitting any OnNext (e.g. Observable.Empty<T>().SingleAsync()).","commonSituations":"Filtering with a predicate that matches nothing; querying an entity by id that was deleted; subscribing before data is written and the source closes.","solutions":["Guarantee the source emits exactly one element before SingleAsync.","Use SingleOrDefaultAsync when zero elements is an expected, acceptable outcome.","Catch InvalidOperationException in OnError and supply a default value."],"exampleFix":"// before\nvar user = await users.Where(u => u.Id == id).SingleAsync();\n// after\nvar user = await users.Where(u => u.Id == id).SingleOrDefaultAsync();","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { var v = await source.SingleAsync(); }\ncatch (InvalidOperationException) { var v = default(TSource); }","preventionTips":["Use SingleOrDefaultAsync when zero elements is acceptable.","Check filter predicates for over-restriction that matches nothing.","Verify source data exists before subscribing to single-element queries."],"tags":["linq","single-operator","empty-sequence","invalid-operation"],"backgroundTag":"empty-result-set","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"}