当我这样做时:
testScheduler.Schedule("Hello world",(scheduler, state) => Console.WriteLine(state));
testScheduler.AdvanceTo(testScheduler.Now);
我在以下代码中点击了此代码VirtualTimeSchedulerBase
:
public void AdvanceTo(TAbsolute time)
{
int num = this.Comparer.Compare(time, this.Clock);
if (num < 0)
throw new ArgumentOutOfRangeException("time");
if (num == 0)
return;
num == 0
是真的,我退出该方法。
我可以打电话testScheduler.Start()
,我的行动将执行。但随后TestScheduler
将继续执行其队列中的所有内容。而我希望它在当前时间停止执行操作。
我在 TestScheduler 上看不到任何其他可以让我得到我想要的行为的方法。
这是一个错误,还是正确的行为,但我错过了什么?
编辑:
我误解了。在计划日期之后TestScheduler
才执行操作。
调度一个动作会立即将其调度为 的当前值testScheduler.Now
。所以直到Now + 1
.
var testScheduler = new TestScheduler();
var due = new DateTime();
testScheduler.Schedule("Hello world", due, (scheduler, s) =>
{
Console.WriteLine(s);
return Disposable.Empty;
});
testScheduler.AdvanceTo(due.Ticks);
// Nothing has happened
testScheduler.AdvanceTo(due.Ticks+1);
// -> "Hello world"
这仍然不是我想要的行为,但是你去。