框架是否有专门的api来检测重入?
我想禁止大量方法的重入。
为单一的方法工作这个代码:
bool _isInMyMethod;
void MyMethod()
{
if (_isInMethod)
throw new ReentrancyException();
_isInMethod = true;
try
{
...do something...
}
finally
{
_isInMethod = false;
}
}
对于每种方法来说这都很乏味。
所以我使用了StackTrace类:
public static void ThrowIfReentrant()
{
var stackTrace = new StackTrace(false);
var frames = stackTrace.GetFrames();
var callingMethod = frames[1].GetMethod();
if (frames.Skip(2).Any( frame => EqualityComparer<MethodBase>.Default.Equals(callingMethod,frame.GetMethod())))
throw new ReentrancyException();
}
它工作正常,但看起来更像一个黑客。
.NET Framework是否有特殊的API来检测重入?
我建议使用PostSharp来解决你的问题。 虽然使用商业工具可能会很昂贵,但出于某个特定的原因,我建议您看一看,因为此工具可以解决更适合通过AOP(日志记录,事务管理,安全性等)解决的其他问题。 公司网站在这里,你可以看看这里的例子。 Pluralsight在AOP方法学上有一个很好的课程,在这里有PostSharp的例子。 祝你好运!
正常的.Net方法是使用一些同步来阻塞其他线程,而不是让它们抛出异常。
链接地址: http://www.djcxy.com/p/67199.html上一篇: Does framework have dedicated api to detect reentrancy?