我正在学习LINQ RX,并且很难理解如何创建处理程序。
我们说我有IObservable<Entity> source
,它提供了一系列实体。现在我想根据Entity
属性定义处理这些Entity.Group
对象的不同策略。我试过了:
source.Where(e=> e.Group = "first").Do(e=> whatever).Subscribe();
它有效。问题是当我添加第二条路径时:
source.Where(e=> e.Group == "first").Do(whateverWithFirst).Subscribe();
source.Where(e=> e.Group == "second").Do(whateverWithSecond).Subscribe();
然后事情发生了两次,我对source
的实施方式有一些例外。
这样做的正确方法是什么?
答案 0 :(得分:1)
您可以使用Observable.RefCount()
在两个查询之间共享订阅:
var publishedSource = source.Publish().RefCount();
publishedSource.Where(e=> e.Group == "first").Do(whateverWithFirst).Subscribe();
publishedSource.Where(e=> e.Group == "second").Do(whateverWithSecond).Subscribe();