2013-07-22 50 views
8

F#中有沒有類似Scala's Promise的東西?有沒有相當於斯卡拉承諾的F#?

雖然期貨被定義爲類型,其不存在的結果而創建只讀佔位符對象 的,一個承諾可以被認爲是 作爲可寫的,單分配容器,其完成了一個 未來。也就是說,可以使用成功的 方法,使用承諾成功完成未來的價值(通過「完成」承諾)。相反,承諾也可以用來完成未來的 ,但通過失敗承諾,使用失敗方法是個例外。

異步的東西涵蓋了這部分,但如果你有代碼在異步環境之外工作,Promise是一個方便的工具。 (例如,你可以做一些事情,例如在UI線程中完成一個Promise - 即使UI環境對Async一無所知)。

回答

12

.Net的等價物是一個TaskCompletionSource,所以你可以使用它們來自F#。您可以使用Async.AwaitTask例如Task<T>Task<T>創建Async<T>

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

//complete completion source using `SetResult`\`SetException` etc.