2017-04-24 9 views
3

私はこれに関するさまざまな質問を見つけましたが、F#解決策は見つけられませんでした。私はそれが返すデータをチェックするためにイベントを待つのをブロックする必要があります。私は、イベントを3回受信する受信を使用しています:F#Observableの反応待ちが完了する

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

私はすべての3つのイベントへのリストに結果を有効にするか、そう、彼らはテストフレームワーク(xUnitフレーム)によって後で確認することができ、あるいは待つたい完了し、Assert.Trueを渡します。

継続する前に3つのイベントが発生するのをどのように待つのですか?他の情報源がを示唆しているObservable.waitがあることがわかります。

答えて

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

関連する問題