2012-02-01 79 views
3

你扇出可觀我有我想變成可觀察如何做反應擴展

的服務RX服務有

IEnumerable<Price> FetchUpdatedPrices() 
    { 
     //do work to return changed data since last update 
    } 

我的想法的接口是使用RX來允許消費者訂閱更新。該實現將每隔x秒輪詢服務並呼叫觀察者。

我想出了以下

public IDisposable Subscribe(IObserver<IEnumerable<Price>> observer) 
    { 

     IObservable<IEnumerable<Price>> updatedPrices = Observable.Interval(new TimeSpan(0, 0, 1)) 
      .Select(r => FetchUpdatedPrices()); 

     return updatedPrices.Subscribe(observer); 
    } 

問題是我想觀察者看到的IObservable<Price>而非IObservable<IEnumerable<Price>>

任何人都可以給這個的Rx小白就如何做到這一點的任何指針?

回答

1

SelectMany怎麼樣?

IObservable<IEnumerable<Price>> updatedPrices = Observable.Interval(new TimeSpan(0, 0, 1)) 
    .SelectMany(r => FetchUpdatedPrices()); 
+0

這麼簡單謝謝你,想看着這個時候我累了:S。 – Fen 2012-02-01 10:36:43

+2

如果不是這種'的IObservable updatedPrices = Observable.Interval(新的TimeSpan(0,0,1))的SelectMany(R => FetchUpdatedPrices()。ToObservable());'? – Enigmativity 2012-02-01 11:11:41

+4

雖然在多播中拋出,或者每個用戶都會得到自己的定時器 – 2012-02-01 17:29:15