我想订阅一个可观察对象,但只运行一次操作,直到另一个IObservable被触发。每次其他IObservable触发时,我都希望被重新订阅并运行我的动作一次。下面的代码应该完成:
Action<object> act = null;
act = _ => {
DoThis();
obj.Observable1.SkipUntil(obj.CompletedObservable).Take(1).Subscribe(act);
};
obj.Observable1.Take(1).Subscribe(act);
有一个更合适的方法来做这个与Rx框架?如果没有,如何将此模式包装到扩展中?
您似乎想要这样做:
first -----1------------2-------------3--4--------->
| | | |
second ---------A--B----------C-D-E-----------F---G->
| | |
final ---------A-------------C---------------F----- >
对于这种情况,SelectMany
, Take
和TakeUntil
的组合应该可以工作。我会说:
var final = from f in first
from s in second.Take(1).TakeUntil(first)
select s;
.Take(1)
确保您只获得第一个项目之后的第一个项目(对于1,2和4)。.TakeUntil(first)
覆盖3,因此F只传递一次(传递给4)。如果您有一个很好的名称为这个操作,它将很容易包装成一个方法,将两个可观察对象作为参数。
我想我知道了:
obj
.CompletedObservable
.StartWith(/* value of suitable type for CompletedObservable */)
.Select(x => obj.Observable1.Take(1))
.Switch()
.Subscribe(x => DoThis());
您试过以下方法吗:
obj.CompletedObservable
.Select(_ => obj.Observable1.Next().First())
.Subscribe(_ => DoThis());