В рабочих процессах 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
бросает)?