【问题标题】:Rx CombineLatest with more than two streams具有两个以上流的 Rx CombineLatest
【发布时间】:2015-12-09 01:16:22
【问题描述】:

我需要知道 4 个可观察流中的最新值何时与谓词匹配。

对于只有两个流,我可以将 CombineLatest 与 Where 结合使用。

我将如何使用 n>2 个流来实现这一点。

谢谢。

编辑:回答我想要实现的目标

void Main()
{
    var s1 = Observable.Interval(TimeSpan.FromMilliseconds(50));
    var s2 = Observable.Interval(TimeSpan.FromMilliseconds(60));
    var s3 = Observable.Interval(TimeSpan.FromMilliseconds(70));
    var s4 = Observable.Interval(TimeSpan.FromMilliseconds(80));

    Observable.CombineLatest(s1, s2, s3, s4)
        .Where(xs => xs.All(x => x > 10 && x < 20))
        .Subscribe(x =>
        {
            x.Dump();
        });
}

【问题讨论】:

  • this answer 有一个 Rxx 扩展,可以满足您的需求。
  • 谢谢。我快速浏览了 Rxx 代码。看起来像一个值得了解的图书馆。

标签: system.reactive


【解决方案1】:

我认为您仍然可以使用 CombineLatest,或者我可能没有满足您的要求。

[TestMethod]
    public void GreaterThan2StreamsCombineLatest()
    {
        //Arrange
        var s1 = Observable.Return(1).Concat(Observable.Return(10));
        var s2 = Observable.Return(2);
        var s3 = Observable.Return(3);

        var expected = "They're all greater than 1";
        var result = string.Empty;

        //Act
        Observable.CombineLatest(s1, s2, s3)
            .Where(xs => xs.All(x => x > 1))
            .Subscribe(x =>
            {
                x.ToList().ForEach(Console.WriteLine);
                result = "They're all greater than 1";
            });

        //Assert
        Assert.AreEqual(expected, result);
    }

【讨论】:

  • 太棒了!我没有意识到有这种超载。你的例子很接近。我会用我在 Linqpad 中找到的内容发布答案。感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
相关资源
最近更新 更多