为什么TakeLast()方法不能在ReplaySubject上工作?



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

相关内容

  • 没有找到相关文章

最新更新