Как вы разветвляете наблюдаемые с реактивными расширениями - PullRequest
3 голосов
/ 01 февраля 2012

У меня есть сервис, который я хотел бы превратить в 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 noob какие-либо указания о том, как это сделать?

1 Ответ

2 голосов
/ 01 февраля 2012

Как насчет SelectMany?

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