已订阅多个observable的Observer未完成

时间:2016-11-15 06:57:04

标签: c# system.reactive

我正在尝试了解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

1 个答案:

答案 0 :(得分:3)

Observable.Interval创造了一个无限的序列,所以你永远不会得到完成的&#39;信息。通过取消订阅,您只需停止收听此无限序列。

如果您希望序列完成,可以使用Observable.Interval(...).Take(3)

之类的内容