2011-07-20 88 views
1

工作根據MSDN文檔,下面的代碼應輸出「5」到控制檯窗口。相反,沒有顯示。爲什麼TakeLast <T>()方法不是在ReplaySubject <T>

static void Main(string[] args) 
{ 
    var o = new ReplaySubject<int>(); 

    o.OnNext(0); 
    o.OnNext(1); 
    o.OnNext(2); 
    o.OnNext(3); 
    o.OnNext(4); 
    o.OnNext(5); 

    o.TakeLast(1).Subscribe(Console.WriteLine); 

    Console.WriteLine("Press any key to exit"); 
    Console.ReadKey(); 
} 

預期輸出:

5 
Press any key to exit 

實際輸出:

Press any key to exit 

誰能請解釋爲什麼是這樣的話?

+0

.NET框架中沒有'TakeLast'。請分享您指向的MSDN文檔頁面的鏈接。 –

+0

@Daniel,它是無擴展的一部分:http://msdn.microsoft.com/en-us/library/hh212114%28v=vs.103%29.aspx –

+0

@Thomas:謝謝 –

回答

5

那是因爲你從來沒有通知序列的完成,所以TakeLast不知道該序列完成,並繼續等待序列結束。這按預期工作:

var o = new ReplaySubject<int>(); 

o.OnNext(0); 
o.OnNext(1); 
o.OnNext(2); 
o.OnNext(3); 
o.OnNext(4); 
o.OnNext(5); 
o.OnCompleted(); 

o.TakeLast(1).Subscribe(Console.WriteLine); 
+0

感謝托馬斯!我的跟進問題是,我做到怎麼辦抓住最新值,而不調用的onComplete()。這裏是萬一[鏈接](http://stackoverflow.com/questions/6762163/how-to-get-the-latest-value-from-a-replaysubjectt-before-completion)你知道答案。 –

相關問題