内部加入两个IObservable

时间:2016-09-16 15:20:06

标签: c# .net system.reactive

使用LINQ Join方法(https://msdn.microsoft.com/en-us/library/bb534675(v=vs.110).aspx)将两个IObservable连接到IEnumerables的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

你真的需要让问题更清晰。 IObservable可以发出随时间推移的项目。如果您正在加入Observable-A和Observable-B,并且一个小时后一个发出项目1,那是否满足条件?

以下代码演示了两个observable的内部联接,假设您根本不关心项目的发布时间,首先发出的项目,或它们之间的相对时间:

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));

答案 1 :(得分:-1)

您不会(无论您是想要加入还是笛卡尔产品)。 IObservable<T>界面用于订阅通知,仅此而已。

但是,如果您确定IObservable<T>也是IEnumerable<T> s,那么只需将其转换为IEnumerable<T>。不用说,这可能不是最好的设计。