Определите, выполняется ли в блоке finally из-за исключения

Можно ли определить, выполняется ли код в настоящее время в контекстеfinally обработчик в результате исключения? Я довольно люблю использоватьIDisposable шаблон для реализации функциональности определения области входа / выхода, но одна проблема, связанная с этим шаблоном, заключается в том, что вы не обязательно хотите, чтобы поведение конца области действия происходило в случае возникновения исключения в телеusing, Я бы искал что-то вроде этого:

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

Есть и другие способы, которыми я могу сделать это (передать делегат функции, которая окружает вызов определенным поведением), но мне интересно, если это возможно сделать с помощьюIDisposable шаблон.

На самом деле, об этом, по-видимому, спрашивали и отвечали раньшеВот, Это можно обнаружить очень хакерским способом. Я бы на самом деле не использовал эту технику, но интересно знать, что это возможно.

Ответы на вопрос(8)

Ваш ответ на вопрос