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

本文关键字:定义 路径 输入 LINQ RX | 更新日期: 2023-09-27 17:54:10

我正在学习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如何实现有关的例外。

正确的做法是什么?

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

您可以使用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();