【发布时间】:2015-01-08 14:13:35
【问题描述】:
我有一个使用 Rx 组合流的用例。我有 3 个流输出值:
S1: ----1----2----3----4----5-----6
S2: ----a---------c---------d------
S3: ---------x---------y----------z
我想合并 (zip) 流 1 & 2 和 1 & 3,逻辑是 2 & 3 永远不能同时输出一个值。
所以想要的输出是:
1,a
2,x
3,c
4,y
5,d
6,z
但实际发生的是:
1,a
1,x
2,c
2,y
3,d
3,z
关于如何获得所需输出的任何线索?
代码:
Subject<int> s1 = new Subject<int>();
Subject<string> s2 = new Subject<string>();
Subject<string> s3 = new Subject<string>();
var zip1 = s1.Zip(s2, (x, y) => {
return new Tuple<int, string>(x, y);
});
var zip2 = s1.Zip(s3, (x, y) => {
return new Tuple<int, string>(x, y);
});
zip1.Subscribe(Console.WriteLine, () => Console.WriteLine("Completed"));
zip2.Subscribe(Console.WriteLine, () => Console.WriteLine("Completed"));
s1.OnNext(1);
s2.OnNext("a");
s1.OnNext(2);
s3.OnNext("x");
s1.OnNext(3);
s2.OnNext("c");
s1.OnNext(4);
s3.OnNext("y");
s1.OnNext(5);
s2.OnNext("d");
s1.OnNext(6);
s3.OnNext("z");
【问题讨论】:
-
s2 和 s3 是否总是交替出现,或者一个连续输出多个值而另一个在该时间跨度内不输出任何值?
-
s2和s3可以连续输出多个值任意次数,所以没有模式。
-
如果 s1 输出多个值而 s2 或 s3 没有输出任何值会发生什么?
-
我没想到那么远,实际上我会尝试编写代码,这样这种情况就不会发生。
标签: c# system.reactive