2013-07-22 2 views
8

F#にScala's Promiseのようなものがありますか?ScalaのPromiseに相当するF#はありますか?

先物がまだ存在していない結果のために作成、読み取り専用プレースホルダオブジェクト のタイプとして定義されているが、約束が完了し、書き込み可能な、単一割り当て容器などの を考えることができ 未来。すなわち、約束を使用して、 メソッドを成功させて(約束を「完了」することによって)、将来価値を で首尾よく達成することができます。逆に、将来を完了するために約束を使用することもできますが、失敗方法を使用して約束を破ることによって例外を除いて、 を完了することができます。

Asyncはこの部分をカバーしていますが、Async環境の外で動作するコードがある場合は、プロミスが便利なツールです。 (たとえば、UIの環境でUIが何も知らない場合でも、UIスレッドでプロミスを完成させることができます)

答えて

12

約束の.Net相当版はTaskCompletionSourceなので使用することができますF#から。 Task<T>からAsync<T>を作成するには、Async.AwaitTaskを使用します。

let tcs = new TaskCompletionSource<int>() 
let ta: Async<int> = Async.AwaitTask tcs.Task 

//complete completion source using `SetResult`\`SetException` etc. 
関連する問題