两个IObservables的内连接



将两个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>。不用说,这可能不是最好的设计。

相关内容

  • 没有找到相关文章

最新更新