Hot / Cold Observable,1个具有多个选择查询的订阅者?

时间:2015-10-09 09:05:32

标签: linq system.reactive

1个订阅者可以使用多个选择查询吗?

例如:

var obj = item.tolist().subscribe(OnNext);

var obj2 = item.where(i=>i.type=="box").subscribe(OnNext);

不确定代码是否正确。但大多数都是这样的。 这使用2订阅。它只能使用1个订阅吗?

1 个答案:

答案 0 :(得分:1)

你绝对可以为不同的observable订阅相同的方法。但是,如果订户具有某种状态,那么您需要了解并发问题,因为订户可能同时执行一个不同的线程。但是,这不是Rx独有的问题,使用Rx无论如何都会帮助您避免共享状态。

这是一个有效的例子:

var observable = Observable.Interval(TimeSpan.FromSeconds(0.2)).Take(10);

var projectionA = observable
  .Where(i => i % 2 == 0)
  .Select(i => Tuple.Create("A", i));
var projectionB = observable
  .Select(i => Tuple.Create("B", i));

projectionA.Subscribe(Console.WriteLine);
projectionB.Subscribe(Console.WriteLine);

我为两个投影订阅Console.WriteLine,如果您尝试执行代码,您将看到来自两个流的事件都被写入控制台。