我正在使用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();
答案 0 :(得分:1)
由于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();