F# Reactive 等待 Observable 完成
F# Reactive wait for Observable to complete
我发现了各种关于此的 SO 问题,但无法找出 F# 解决方案。我需要阻止等待事件触发我来检查它 returns 的数据。我正在使用 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
。
我认为最简单的选择是使用 Async.AwaitObservable
函数 - 遗憾的是,F# 核心库中尚不可用,但您可以从 FSharpx.Async 包中获取它,或者直接复制function soruce from GitHub。
使用这个函数,你应该可以这样写:
let _, data =
Observable.take 3 ackNack
|> Async.AwaitObservable
|> Async.RunSynchronously
Console.WriteLine("{0}", data.AckNack)
Assert.True(data.TotalAckCount > 0u)
我发现了各种关于此的 SO 问题,但无法找出 F# 解决方案。我需要阻止等待事件触发我来检查它 returns 的数据。我正在使用 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
。
我认为最简单的选择是使用 Async.AwaitObservable
函数 - 遗憾的是,F# 核心库中尚不可用,但您可以从 FSharpx.Async 包中获取它,或者直接复制function soruce from GitHub。
使用这个函数,你应该可以这样写:
let _, data =
Observable.take 3 ackNack
|> Async.AwaitObservable
|> Async.RunSynchronously
Console.WriteLine("{0}", data.AckNack)
Assert.True(data.TotalAckCount > 0u)