将两个IObservables连接成一个的最好方法是什么,就像IEnumerables可以使用LINQ join方法(https://msdn.microsoft.com/en-us/library/bb534675(v=vs.110).aspx)连接一样?
你真的需要把问题弄清楚。IObservable
可以发射间隔时间的物品。如果你将可观察对象a和可观察对象b结合起来,其中一个比另一个晚一个小时发出项目1,这是否满足条件?
下面的代码演示了两个可观察对象的内部连接,假设您根本不关心项是什么时候发出的,哪个先发出的,或者它们之间的相对时间:
var factorsOfTwo = Observable.Interval(TimeSpan.FromSeconds(1))
.Select(i => i * 3)
.Take(10);
var factorsOfThree = Observable.Interval(TimeSpan.FromSeconds(1))
.Select(i => i * 2)
.Take(10);
var factorsOfBothTwoAndThree = factorsOfTwo.Join(factorsOfThree,
i => Observable.Never<object>(),
i => Observable.Never<object>(),
(a, b) => Tuple.Create(a, b)
)
.Where(t => t.Item1 == t.Item2)
.Select(t => t.Item1);
factorsOfBothTwoAndThree.Subscribe(l => Console.WriteLine(l));
不需要(无论您是想要连接还是笛卡尔积)。IObservable<T>
接口服务于订阅通知的目的,不多也不少。
但是,如果您确定IObservable<T>
s也是IEnumerable<T>
s,那么只需将它们转换为IEnumerable<T>
。不用说,这可能不是最好的设计。