C# SequenceEqual如何在被动扩展中工作

C# SequenceEqual如何在被动扩展中工作,c#,.net,reactive-programming,C#,.net,Reactive Programming,我很难弄清楚SequenceEqual在被动扩展版本2.2.5中是如何工作的 下面是代码 var subject1 = new Subject<int>(); var subject2 = new Subject<int>(); IObservable<bool> sequenceEqual = subject1.SequenceEqual(subject2); subject1.On

我很难弄清楚SequenceEqual在被动扩展版本2.2.5中是如何工作的

下面是代码

var subject1 = new Subject<int>();
            var subject2 = new Subject<int>();

            IObservable<bool> sequenceEqual = subject1.SequenceEqual(subject2);

            subject1.OnNext(5);
            subject1.OnNext(3);

            subject2.OnNext(1);
            subject2.OnNext(4);

            //This will be notified if the two sequences completed
            sequenceEqual.Subscribe(b => Console.WriteLine("Two sequences are equal ? {0}", b));

            subject1.OnCompleted();
            subject2.OnCompleted();
var subject1=新主题();
var subject2=新主题();
IObservable sequenceEqual=主题1.sequenceEqual(主题2);
主题1.OnNext(5);
主题1.OnNext(3);
主题2.OnNext(1);
主题2.OnNext(4);
//如果两个序列已完成,则会通知此消息
Subscribe(b=>Console.WriteLine(“两个序列相等?{0}”,b));
主题1.未完成();
受试者2.未完成();
我希望输出是“两个序列相等?错误”,但结果是正确的,即使它们包含不同的元素


我只是想知道为什么结果会是这样?SequenceEqual实际上做什么?

使用SequenceEquals,它将从您订阅的点开始监控。因此,在OnNext调用之前订阅,您的订阅代码或使用ReplaySubjects时会出现错误。

这种行为有点奇怪,因为我希望它在声明时被监控,而不是在我订阅通知时被监控。是的,我完全同意。感觉SequenceEquals应该返回一个可连接的可观察对象,因为从平等的角度来看,主体似乎变得“热”。