我想订阅一个observable,但只运行一次动作,直到另一个IObservable触发。每次其他IObservable触发时,我都希望重新订阅并执行一次我的操作。以下代码应该实现:
Action<object> act = null;
act = _ => {
DoThis();
obj.Observable1.SkipUntil(obj.CompletedObservable).Take(1).Subscribe(act);
};
obj.Observable1.Take(1).Subscribe(act);
使用Rx框架有更合适的方法吗?如果没有,我怎么能将这个模式包装成扩展名呢?
答案 0 :(得分:2)
似乎你想要这样的东西:
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)。如果你有一个很好的名字来进行这个操作,那么很容易将这两个observable作为参数包装到一个方法中。
答案 1 :(得分:1)
我想我已经明白了:
obj
.CompletedObservable
.StartWith(/* value of suitable type for CompletedObservable */)
.Select(x => obj.Observable1.Take(1))
.Switch()
.Subscribe(x => DoThis());
答案 2 :(得分:0)
您是否尝试过以下操作:
obj.CompletedObservable
.Select(_ => obj.Observable1.Next().First())
.Subscribe(_ => DoThis());