是否有F#等同于Scala的承诺?

时间:2013-07-22 17:10:26

标签: scala f# promise

F#中有Scala's Promise之类的内容吗?

  

虽然期货被定义为一种只读占位符对象   为了一个尚未存在的结果而创造,可以想到一个承诺   作为一个可写的单一赋值容器,它完成了一个   未来。也就是说,承诺可以用来成功完成一个   未来的价值(通过“完成”承诺)使用成功   方法。相反,承诺也可用于完成未来   有一个例外,通过失败,使用失败方法。

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

1 个答案:

答案 0 :(得分:13)

承诺的.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.