2016-08-19 53 views
1

我有以下幾點:停止可觀察當下一個可用

IObservable<A> as_; 
Func<A, IObservable<B>> getbs; 

getbs是返回觀察到的B秒的infinte的功能。

我希望IObservable<B>在下一個A處於「可用」狀態時立即「切換」到下一個IObservable<B>

類似於as_.SelectMany(getbs)將不起作用,因爲它會繼續從第一個A開始B s,因爲該序列永遠不會自然終止。

+0

其他語言rx實現有一個叫FlatMapLatest的函數。我想知道它爲什麼從.net版本中缺失 –

+0

這對於發佈有效的C#會非常有幫助。 – Enigmativity

+0

固定@Enigmativity – Martijn

回答

3

SelectMany就像是Select後跟Merge。您需要使用Select和您的功能,然後Switch

IObservable<int> a = Observable.Generate(0, _ => true, i => i + 1, i => i, _ => TimeSpan.FromSeconds(1)); 
Func<int, IObservable<string>> selector = i => Observable.Generate(1, _ => true, j => j + 1, j => $"{i} x {j}", _ => TimeSpan.FromMilliseconds(50)); 

a.Select(selector).Switch().Subscribe(s => Console.WriteLine(s));