2017-04-24 51 views
3

我發現了很多關於此的SO問題,但找不到F#解決方案。我需要阻止等待事件向我開火以檢查它返回的數據。我使用的Rx接收事件3次:F#反應等待Observable完成

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

回答

6

我認爲最簡單的選擇是使用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) 
+0

感謝您的回答再次托馬斯! :)我會嘗試一下Async軟件包。 – platforma

+0

正是我想要達到的。我感謝你的幫助托馬斯,在我的問題:) – platforma