每次发生另一个事件时使用响应来重新订阅



我想订阅一个可观察对象,但只运行一次操作,直到另一个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, TakeTakeUntil的组合应该可以工作。我会说:

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());

相关内容

  • 没有找到相关文章

最新更新