框架是否有专门的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?

下一篇: Weird behavior with java Scanner reading files