等待TestScheduler

时间:2018-03-06 14:26:50

标签: c# system.reactive

我正在使用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();

1 个答案:

答案 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();