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
模式来做到这一点。
实际上,这显然在此之前已被问及。有可能以一种非常骇人听闻的方式进行检测。我实际上不会使用这种技术,但有趣的是知道它是可能的。