在F#中有类似Scala的承诺吗?
虽然将future定义为为尚未存在的结果创建的只读占位符对象类型,但可以将promise视为可写的单一赋值容器,从而完成未来.也就是说,可以使用promise来使用success方法成功完成具有值(通过"完成"承诺)的未来.相反,承诺也可以用于通过使用失败方法失败承诺来完成未来的异常.
Async的内容涵盖了部分内容,但如果您的代码在Async环境之外运行,则Promises是一个方便的工具.(例如,您可以执行诸如在UI线程中完成Promise之类的操作 - 即使UI环境对Async一无所知也是如此.)
Lee*_*Lee 13
.Net等效的promise是TaskCompletionSource,因此您可以从F#中使用它们.您可以创建一个Async<T>从Task<T>使用Async.AwaitTask如
let tcs = new TaskCompletionSource<int>()
let ta: Async<int> = Async.AwaitTask tcs.Task
//complete completion source using `SetResult`\`SetException` etc.
Run Code Online (Sandbox Code Playgroud)