我正在使用TestScheduler来测试和设计我的序列,但是对于下面的代码片段,TestScheduler挂起,而DefaultScheduler工作正常。在某些情况下可能会删除等待,但由于显而易见的原因,这不是我想要的。那么有没有办法使用TestScheduler并一起等待?
var testScheduler = new TestScheduler();
var response = await Observable.Return(Unit.Default).Delay(TimeSpan.FromTicks(1000),testScheduler);
testScheduler.AdvanceBy(1000);
response.ShouldNotBeNull();
你的例子永远不会与TestScheduler
完成,因为await
性质。程序将在await
语句处停止并等待您的observable返回值。但是它永远不会返回,因为您需要通过调用AdvanceBy
函数来移动测试调度程序,并且在阻塞await
之后调用。
如果您等待,那么它将永远不会进一步移动您的调度程序。我会在这里删除async / await并去订阅。其次,您需要使用相同的TestScheduler实例。
var ts = new TestScheduler();
System.Reactive.Unit resp = null;
var obs = Observable.Return(System.Reactive.Unit.Default).Delay(TimeSpan.FromTicks(1000),ts).Subscribe(r => { resp = r; });
ts.AdvanceBy(1000);
resp.ShouldNotBeNull();