9

F# 中有类似Scala 的 Promise的东西吗?

虽然 future 被定义为为尚不存在的结果创建的一种只读占位符对象,但可以将 promise 视为可写的、单赋值容器,它完成了 future。也就是说,promise 可用于使用 success 方法成功完成具有值的未来(通过“完成”promise)。相反,promise 也可以用来完成一个带有异常的未来,通过使用 failure 方法使 promise 失败。

Async 的内容涵盖了其中的一部分,但是如果您有在 Async 环境之外工作的代码,Promises 是一个方便的工具。(例如,您可以在 UI 线程中完成诸如完成 Promise 之类的事情 - 即使 UI 环境对异步一无所知。)

4

1 回答 1

13

Promise的 .Net 等效项是TaskCompletionSource,因此您可以从 F# 中使用它们。您可以使用Async.AwaitTask创建Async<T>一个例如Task<T>

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

//complete completion source using `SetResult`\`SetException` etc.
于 2013-07-22T17:52:57.697 回答