订阅多个observable的观察者未完成

订阅多个observable的观察者未完成

问题描述:

我想了解RX,并正在为两个不同的observables订阅创建的观察者。订阅多个observable的观察者未完成

var observer = Observer.Create<string>(x => Console.WriteLine(x), 
      () => Console.WriteLine("Completed")); 

var subscription1 = Observable.Interval(TimeSpan.FromSeconds(1)) 
      .Select(x => "X" + x) 
      .Subscribe(observer); 

var subscription2 = Observable.Interval(TimeSpan.FromSeconds(2)) 
      .Select(x => "YY" + x) 
      .Subscribe(observer); 

Console.WriteLine("Unsubscribing in 5 seconds"); 
Thread.Sleep(5000); 
subscription1.Dispose(); 
subscription2.Dispose(); 

Console.WriteLine("All disposed"); 

我认为在处置订阅1后,观察者将完成。我在这里错过了什么?目前,我得到以下控制台输出从上面的代码:

Unsubscribing in 5 seconds 
X0 
YY0 
X1 
X2 
YY1 
X3 
All disposed 

Observable.Interval创建了一个无限序列,所以你永远不会得到“已完成”的消息。通过取消订阅,您只需停止听这个无限序列。

如果你想要完成序列,你可以使用类似Observable.Interval(...).Take(3)的东西。

+0

谢谢!我完全错过了取消订阅意味着停止收听的观点。 :) – Rok