为什么TakeLast <T>()方法不适用于ReplaySubject <T>

Mat*_*ace 1 .net c# system.reactive

根据MSDN文档,以下代码应输出"5"到控制台窗口.相反,没有显示任何内容.

static void Main(string[] args)
{
     var o = new ReplaySubject<int>();

     o.OnNext(0);
     o.OnNext(1);
     o.OnNext(2);
     o.OnNext(3);
     o.OnNext(4);
     o.OnNext(5);

     o.TakeLast(1).Subscribe(Console.WriteLine);

     Console.WriteLine("Press any key to exit");
     Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

预期产量:

5
Press any key to exit
Run Code Online (Sandbox Code Playgroud)

实际产量:

Press any key to exit
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么会这样吗?

Tho*_*que 5

那是因为您从未通知序列的完成,因此TakeLast不知道序列是否完整并继续等待序列的结束.这按预期工作:

var o = new ReplaySubject<int>();

o.OnNext(0);
o.OnNext(1);
o.OnNext(2);
o.OnNext(3);
o.OnNext(4);
o.OnNext(5);
o.OnCompleted();

o.TakeLast(1).Subscribe(Console.WriteLine);
Run Code Online (Sandbox Code Playgroud)