合并后重新订阅IObservable



我有一个IObservable,它最初监听一个源:

_itemsChanged = Observable.Merge(item1.ObserveItemChanged);
_itemsChanged.Subscribe(_ => Console.WriteLine("item changed"));

当应用程序运行时,可能会添加其他项目,我想将新项目的流合并到我现有的流:

var item2 = new Item();
_itemsChanged.Merge(item2.ObserveItemChanged);

但是,我只看到item1更改时的输出。我需要刷新订阅吗?我希望合并后的流能够立即被拾取。

基本思想是使用您订阅的Subject<IObservable<T>>。这让你可以随时添加更多的项目。这里有一种方法来抽象它一点(主题是一个Subject<Item>,我们然后项目并合并到Observable<T>):

    var subject = new Subject<Item>();
    IObserver<Item> newItems = subject;
    IObservable<T> itemsChanged = subject.SelectMany(item => item.ObserveItemChanged);
    itemsChanged.Subscribe(_ => Console.WriteLine("change"));
    // add items
    newItems.OnNext(item1);
    newItems.OnNext(item2);

相关内容

  • 没有找到相关文章