根据 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();
}
预期输出:
5
Press any key to exit
实际输出:
Press any key to exit
谁能解释一下为什么会这样?
那是因为你从来没有通知序列完成,所以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);
我是一名优秀的程序员,十分优秀!