Determine si se está ejecutando finalmente en el bloque debido a una excepción lanzada

¿Es posible determinar si el código se está ejecutando actualmente en el contexto de unfinally controlador como resultado de una excepción lanzada? Me gusta mucho usar elIDisposable patrón para implementar la funcionalidad de alcance de entrada / salida, pero una preocupación con este patrón es que es posible que no desee necesariamente que se produzca el comportamiento de fin de ámbito si se produce una excepción en el cuerpo delusing. Estaría buscando algo como esto:

public static class MyClass
{
    public static void MyMethod()
    {
        using (var scope = MyScopedBehavior.Begin())
        {
            //Do stuff with scope here
        }
    }
}

public sealed class MyScopedBehavior : IDisposable
{
    private MyScopedBehavior()
    {
        //Start of scope behavior
    }

    public void Dispose()
    {
        //I only want to execute the following if we're not unwinding
        //through finally due to an exception:
        //...End of scope behavior    
    }

    public static MyScopedBehavior Begin()
    {
        return new MyScopedBehavior();
    }
}

Hay otras formas en que puedo lograr esto (pasar un delegado a una función que rodea la llamada con un comportamiento particular), pero tengo curiosidad si es posible hacerlo usando elIDisposable modelo.

En realidad, esto aparentemente se ha preguntado y respondido antesaquí. Es posible detectar de una manera muy hack. Realmente no usaría esa técnica, pero es interesante saber que es posible.

Respuestas a la pregunta(8)

Su respuesta a la pregunta