C# RX-zip与组的行为不符合预期-可能存在错误?
我有一个包含以下代码的程序,作为我正在尝试执行的其他操作的简化版本:C# RX-zip与组的行为不符合预期-可能存在错误?,c#,system.reactive,C#,System.reactive,我有一个包含以下代码的程序,作为我正在尝试执行的其他操作的简化版本: Subject<int> numbers = new Subject<int>(); Subject<string> strings = new Subject<string>(); var oddsAndEvens = numbers.GroupBy(i => i % 2); var zipped = oddsAndEvens.Zip(strings, (gr
Subject<int> numbers = new Subject<int>();
Subject<string> strings = new Subject<string>();
var oddsAndEvens = numbers.GroupBy(i => i % 2);
var zipped = oddsAndEvens.Zip(strings,
(group, str) => group.Select(
i => new Tuple<int, string>(i, str)))
.SelectMany(x => x);
zipped.Subscribe(t => Console.WriteLine("{0}, {1}", t.Item1, t.Item2));
numbers.OnNext(0);
strings.OnNext("even");
numbers.OnNext(2);
strings.OnNext("odd");
numbers.OnNext(1);
numbers.OnNext(3);
Console.ReadKey();
而我希望输出是
0, even
2, even
1, odd
3, odd
我认为正在发生的是正在观察0并创建一个组。每个组在观察到一个字符串(并将两个字符串压缩在一起)之前不能输出任何值,但在观察到第一个字符串时,数字0已经消失。如果我正确理解RX,则在有人订阅数字0之前,该组不应输出该数字
我误解了什么吗?有没有办法阻止组输出,直到观察到字符串为止?不清楚您在这里想要实现什么。Rx的工作正常 Zip操作符的结果选择器捕获一个组流和一个字符串。注意,它没有捕获组流的事件 当结果选择器运行时,组流已发送
0
。SelectMany
将在0
事件结束后订阅群组流
只有当字符串是第一个发送的事件时(将OnNext(“偶数”)
放在一行上),您才可以确定,因为创建组时将订阅该组,而这正好是第一个事件发送到组之前
GroupBy
操作员不会记住和重播历史事件,而且它的来源很热。不清楚您在这里想要实现什么。Rx的工作正常
Zip操作符的结果选择器捕获一个组流和一个字符串。注意,它没有捕获组流的事件
当结果选择器运行时,组流已发送0
。SelectMany
将在0
事件结束后订阅群组流
只有当字符串是第一个发送的事件时(将OnNext(“偶数”)
放在一行上),您才可以确定,因为创建组时将订阅该组,而这正好是第一个事件发送到组之前
GroupBy
操作员将不会记住和重放历史事件,而且其来源是热的
0, even
2, even
1, odd
3, odd