Determine se a execução está finalmente no bloco devido à exceção que está sendo lançada

É possível determinar se o código está atualmente em execução no contexto de umfinally manipulador como resultado de uma exceção ser lançada? Eu gosto bastante de usar oIDisposable padrão para implementar a funcionalidade de escopo de entrada / saída, mas uma preocupação com esse padrão é que você pode não necessariamente querer que o comportamento de fim de escopo ocorra se ocorrer uma exceção no corpo dousing. Eu estaria procurando algo como isto:

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();
    }
}

Existem outras maneiras de conseguir isso (passar um delegado para uma função que envolve a chamada com um comportamento específico), mas estou curioso para saber se é possível fazê-lo usando o comandoIDisposable padronizar.

Na verdade, isso aparentemente foi perguntado e respondido antesaqui. É possível detectar de uma maneira muito hackiana. Na verdade, eu não usaria essa técnica, mas é interessante saber que é possível.

questionAnswers(8)

yourAnswerToTheQuestion