Rx CombineLatest 有两个以上的流
Rx CombineLatest with more than two streams
我需要知道 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();
});
}
我认为您仍然可以使用 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);
}
我需要知道 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();
});
}
我认为您仍然可以使用 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);
}