根据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
任何人都可以解释为什么会这样吗?
答案 0 :(得分: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);