2012-02-01 2 views
3

У меня есть сервис, который я хотел бы превратиться в гх наблюдаемуюКак вы веер наблюдаемых с реактивными расширениями

Служба имеет интерфейс

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

Моей идеи заключался в использовании ого в разрешить потребителю подписываться на обновления. Реализация будет опросить службу каждые х секунд и вызвать наблюдателя.

я придумал следующую

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 NooB любые указатели о том, как это сделать ?

ответ

1

Как насчет SelectMany?

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

Простой, как спасибо, думаю, я был уставшим, если смотреть на это:. S – Fen

+2

Если это не 'IObservable updatedPrices = Observable.Interval (новый TimeSpan (0, 0, 1)) SelectMany (г => FetchUpdatedPrices(). ToObservable()); '? – Enigmativity

+4

Бросьте в Multicast, хотя, или каждый абонент получит свой собственный таймер –

Смежные вопросы