【发布时间】:2011-02-07 22:07:51
【问题描述】:
我是 RX 新手,我希望的场景运行良好,但在我看来,必须有一种更简单或更优雅的方式来实现这一点。我有一个IObservable<T>,我想订阅它,通过触发一个异步操作,为它看到的每个 T 生成一个 U,我最终得到一个 IObservable<U>,。
到目前为止,我所拥有的(效果很好,但看起来很麻烦)使用中间事件流,如下所示:
public class Converter {
public event EventHandler<UArgs> UDone;
public IConnectableObservable<U> ToUs(IObservable<T> ts) {
var us = Observable.FromEvent<UArgs>(this, "UDone").Select(e => e.EventArgs.U).Replay();
ts.Subscribe(t => Observable.Start(() => OnUDone(new U(t))));
return us;
}
private void OnUDone(U u) {
var uDone = UDone;
if (uDone != null) {
uDone(this, u);
}
}
}
...
var c = new Converter();
IConnectableObservable<T> ts = ...;
var us = c.ToUs(ts);
us.Connect();
...
我确定我错过了一种更简单的方法来做到这一点......
【问题讨论】:
-
你确定要
Replay吗?
标签: asynchronous system.reactive