为LINQ RX中的不同输入定义不同的路径

时间:2014-03-26 17:18:00

标签: c# .net linq system.reactive reactive-programming

我正在学习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的实施方式有一些例外。

这样做的正确方法是什么?

1 个答案:

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