2016-11-15 3 views
1

Я пытаюсь узнать о RX и подписывать созданного наблюдателя на два разных наблюдаемых.Наблюдатель, подписанный на несколько наблюдаемых, не завершен

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 

ответ

3

Observable.Interval создает бесконечную последовательность, так что вы никогда не получите «заполненные» сообщения. Отписавшись, вы просто перестаете слушать эту бесконечную последовательность.

Если вы хотите, чтобы последовательность была завершена, вы могли бы использовать что-то вроде Observable.Interval(...).Take(3).

+0

Спасибо! Я полностью упустил тот момент, что отмена подписки просто означает прекратить слушать. :) – Rok