1
0
Эх сурвалжийг харах

4.x: Make Never<TResult> singleton. (#513)

David Karnok 7 жил өмнө
parent
commit
a4cc80fea1

+ 14 - 0
Rx.NET/Source/src/System.Reactive/Linq/Observable/Never.cs

@@ -8,6 +8,20 @@ namespace System.Reactive.Linq.ObservableImpl
 {
     internal sealed class Never<TResult> : IObservable<TResult>
     {
+        /// <summary>
+        /// The only instance for a TResult type: this source
+        /// is completely stateless and has a constant behavior.
+        /// </summary>
+        internal static readonly IObservable<TResult> Default = new Never<TResult>();
+
+        /// <summary>
+        /// No need for instantiating this more than once per TResult.
+        /// </summary>
+        private Never()
+        {
+
+        }
+
         public IDisposable Subscribe(IObserver<TResult> observer)
         {
             if (observer == null)

+ 1 - 1
Rx.NET/Source/src/System.Reactive/Linq/QueryLanguage.Creation.cs

@@ -162,7 +162,7 @@ namespace System.Reactive.Linq
 
         public virtual IObservable<TResult> Never<TResult>()
         {
-            return new Never<TResult>();
+            return ObservableImpl.Never<TResult>.Default;
         }
 
         #endregion

+ 1 - 1
Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/WhenTest.cs

@@ -125,7 +125,7 @@ namespace ReactiveTests.Tests
             var scheduler = new TestScheduler();
 
             var xs = Observable.Never<int>();
-            var ys = Observable.Never<int>();
+            var ys = Observable.Never<int>().AsObservable();
 
             var res = scheduler.Start(() =>
                 Observable.When(