我有一个测试BufferWithTime的单元测试。当在缓冲将发出新值时发出值时,我似乎得到了不一致的结果。
var scheduler = new TestScheduler();
var source = scheduler.CreateColdObservable(
new Recorded<Notification<int>>(50, new Notification<int>.OnNext(1)),
new Recorded<Notification<int>>(100, new Notification<int>.OnNext(2)),
new Recorded<Notification<int>>(150, new Notification<int>.OnNext(3)),
new Recorded<Notification<int>>(200, new Notification<int>.OnNext(4)),
new Recorded<Notification<int>>(250, new Notification<int>.OnNext(5)),
new Recorded<Notification<int>>(300, new Notification<int>.OnNext(6)),
new Recorded<Notification<int>>(350, new Notification<int>.OnNext(7)),
new Recorded<Notification<int>>(400, new Notification<int>.OnNext(8)),
new Recorded<Notification<int>>(450, new Notification<int>.OnNext(9)),
new Recorded<Notification<int>>(450, new Notification<int>.OnCompleted()));
var results = scheduler.Run(() => source
.BufferWithTime(TimeSpan.FromTicks(150), scheduler));
我从中得到的结果基本上是:
results[0] = [1,2]
results[1] = [3,4,5,6]
results[2] = [7,8,9]
我的问题是,为什么第一个缓冲区中只有两个项目而第二个缓冲区中只有4个项目?我希望发生一个与缓冲同时发生的源,它们要么总是进入缓冲区,要么总是排队等待下一个缓冲区。我偶然发现了一个错误吗?
答案 0 :(得分:1)
根据MSDN论坛上的回复,这不是错误。您可以阅读他们的答案here。
基本上,当某些东西被安排在与其他东西完全相同的时间执行时,它就是优先级的调度顺序,即它们排队。通过上面的例子查看调度的顺序时,您可以看到我为什么会得到我正在获得的行为。
然后,他们将继续循环。