有没有办法确定代码当前是否正在执行 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
模式来实现。
实际上,似乎已经有人之前提出并回答了这里。 它可以通过一种非常巧妙的方式进行检测。我不会使用那种技术,但了解它是可能的很有趣。