IDisposable(2)

Disposeメソッドが例外で落ちたときでも他のDisposeメソッドが呼ばれるかどうか。

using System;

class Program : IDisposable
{
    private static int count = 0;
    private readonly int id = count++;

    public void Dispose()
    {
        Console.WriteLine("dispose {0}", id);
        throw new Exception("The method or operation is not implemented.");
    }

    static void Main(string[] args)
    {
        try
        {
            using (Program p1 = new Program())
            using (Program p2 = new Program())
            {
                Console.WriteLine("proc");
            }
            Console.WriteLine("end");
        }
        catch (Exception) 
        {
            Console.WriteLine("error");
        }
    }
}

で、こうなる。


proc
dispose 1
dispose 0
error

と言うことで、Disposeが例外で落ちても他のDiposeメソッドは呼ばれる、と。
でも出来る限りこの手のメソッドで例外は送出したくない。