根据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);