在为新订阅者缓存最新事件时包装FromEventPattern的Observable

时间:2014-09-08 15:19:57

标签: system.reactive reactive-programming

我使用Observable.FromEventPattern创建了一个observable。我们称之为fromEvents

我想创建另一个包裹fromEvents的observable。我们称这第二个可观察wrapper

订阅wrapper时应该:

  1. 发布fromEvents中的最新项目(如果有)。
  2. 发布来自fromEvents
  3. 的其他项目

    显然wrapper需要维持对fromEvents的订阅,以便始终可以访问最近的活动。

    我尝试了ReplayPublishPublishLastObservable.Defer的各种组合,而且我从来没有得到我想要的结果

    我确定Rx的操作员能满足我的需求,我只是不确定如何把所有东西放在一起,成为我的新人。

2 个答案:

答案 0 :(得分:1)

我认为通过这样做我已经能够得到我想要的东西:

Events = Observable.FromEventPattern(...).Replay(1).RefCount();

// contrived example
// in my real app the subscription lives for a specific duration
// and Events is exposed as a readonly property
using(Events.Subscribe())
{
     // get most recent or wait for first
    var e = Events.FirstAsync().Wait();
}

答案 1 :(得分:0)

使用Publish重载的示例,该重载使用幕后的BehaviorSubject来跟踪最近的事件。

var fromEvents = Observable.FromEventPattern(...);
var published = fromEvents.Publish(null);
// subscribe to this one
var wrapper = published.Where(e => e != null);
// start collecting values
var subscription = published.Connect();

wrapper.Subscribe(...);