2012-06-13 33 views
1

給定以下代碼。BehaviourSubject和CombineLatest - 怪異行爲

EventLoopScheduler scheduler = new EventLoopScheduler(ts => new Thread(ts)); 

BehaviorSubject<int> subject = new BehaviorSubject<int>(0); 

subject 
    .ObserveOn(scheduler) 
    .CombineLatest(Observable.Interval(TimeSpan.FromSeconds(1), scheduler), (x, y) => x)       
    .Subscribe(x => Debug.WriteLine(x)); 

subject.OnNext(1); 

爲什麼打印?

0 
1 
0 
1 
0 
1 
... 

相反的:

所有輸出的
0 
1 
1 
1 
1 
1 
... 

回答

1

首先看起來真的很奇怪。我會說他們兩個。我猜的輸出應該是:

1 
1 
1 
1 
1 

沒有0。這是因爲第一個區間值將在1秒內產生 - 絕對是在您致電subject.OnNext(1);

另一個平面物件BehaviourSubject<int> - 是英國版的BehaviorSubject(Of T)? :)如果你有自己的BehaviourSubject實施,那麼請用它來擴展你的問題。

+1

這是英國版本。 – ronag

+0

你是什麼意思?當你從英國下載反應式擴展時,你會得到英國改編名稱的「BehaviorSubject」?我想你已經在你的問題中發佈了一段可編譯的代碼。但是我的RX程序集沒有「BehaviourourSubject」類。所以我的假設 - 你有自己的'BehaviourSubject'實現。如果我是對的,你可以請張貼嗎? –

+0

Appologies,它應該是BehaviorSubject,不知道如何「U」在那裏。 – ronag