F#: The “Use” statement applied to Exception Handling

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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s