Определите, выполняется ли в блоке 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
шаблон.
На самом деле, об этом, по-видимому, спрашивали и отвечали раньшеВот, Это можно обнаружить очень хакерским способом. Я бы на самом деле не использовал эту технику, но интересно знать, что это возможно.