F#Reactive等待Observable完成

时间:2017-04-24 09:46:50

标签: f# system.reactive xunit

我发现了各种各样的SO问题,但无法弄清楚F#解决方案。我需要阻止等待事件向我发射以检查它返回的数据。我使用Rx接收事件3次:

let disposable =
    Observable.take 3 ackNack
    |> Observable.subscribe (
        fun (sender, data) ->
            Console.WriteLine("{0}", data.AckNack)
            Assert.True(data.TotalAckCount > 0u)
    )

我想将结果转换为列表,以便稍后可以通过测试框架(xUnit)进行检查,或者等待所有3个事件完成并传递Assert.True

在继续之前,我如何等待3个事件开火?我可以看到有Observable.wait个其他来源建议Async.RunSynchronously

1 个答案:

答案 0 :(得分:6)

我认为最简单的选择是使用Async.AwaitObservable函数 - 遗憾的是,这在F#核心库中尚不可用,但您可以从FSharpx.Async包中获取它,或者只复制{{3 }}。

使用该功能,您应该能够编写如下内容:

let _, data = 
  Observable.take 3 ackNack
  |> Async.AwaitObservable
  |> Async.RunSynchronously

Console.WriteLine("{0}", data.AckNack)
Assert.True(data.TotalAckCount > 0u)