My understanding is that the “use” statement guarantees that the Dispose method of IDisposable will get invoked before exiting the function.

Disposable Example:

open System

type SomeDisposable() =

    interface IDisposable with
        member this.Dispose() = ()

    member this.Divide() = 
        try 0/0
        with ex -> raise ex

I have observed that the Dispose method gets triggered after an exception is thrown.

module xxx =

    open NUnit.Framework
    open FsUnit

    let ``Some Test``() =
        use something = new SomeDisposable()
        something.Divide() |> ignore