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.