在 F#工作流中,我们可以定义应使用关键字async
清理的资源。use
但是如何use
交互return
呢?
例如,给定以下代码:
let createResource = async {
use r = Resource ()
do! operationThatMightThrow r
return r
}
async {
use! r = createResource
printfn "%O" r
}
|> Async.RunSynchronously
呼叫将在哪里Resource.Dispose
发生?
我该如何设计它以便r
始终清理(即使operationThatMightThrow
抛出)?