合并后重新订阅IObservable(Resubscribe IObservable after merge)

编程入门 行业动态 更新时间:2024-10-17 11:34:14
合并后重新订阅IObservable(Resubscribe IObservable after merge)

我有一个最初收听一个来源的IObservable:

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

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

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

但是,我只在item1更改时才看到输出。 我是否必须以某种方式更新订阅? 我希望合并的流可以立即被接收。

I have an IObservable that is initially listening to one source:

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

As the app runs, additional items might be added and I want to merge the new item's stream to my existing one:

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

However, I only see output when item1 is changed. Do I have to refresh the subscription somehow? I expected the merged stream to be picked up right away.

最满意答案

基本思想是使用您订阅的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);

The basic idea is to use a Subject<IObservable<T>> that you are subscribed to. This lets you add more items on the fly. Here is a way to abstract it a bit (the subject is a Subject<Item> which we then project and merge into the 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);

更多推荐

本文发布于:2023-08-06 17:37:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1452794.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:IObservable   Resubscribe   merge

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!