背景:
我正在使用 XNA 并有一个清单处理器,它将整理我的内容项目中的所有资产,并按(除其他外)它们的构建类型对它们进行分类。为此,我需要构建它们。其中一些资产有一个处理器,它本身使用清单,这意味着资产处理器试图调用清单处理器,所以我得到了永无止境的递归。
问题:
我尝试使用命名Mutex
来检测项目构建何时递归并抛出错误,该错误在其他地方处理,但它不起作用。
代码:
public class ManifestProcessor : ContentProcessor<ContentManifestAsset, ContentManifestContent>
{
private static Mutex _LockingMutex = new Mutex(false, "ManifestProcessor");
public override ContentManifestContent Process(ContentManifestAsset input, ContentProcessorContext context)
{
// If we've already locked on this object then we're doing a build as a result of building some other asset, so throw an exception
if (!_LockingMutex.WaitOne(0))
{
throw new NestedManifestBuildException();
}
else
{
try
{
// Stuff that might cause this method to get
// invoked again (via reflection)
}
finally
{
_LockingMutex.ReleaseMutex();
}
}
我是否正确使用了 Mutex 类?如何检测Process
被递归调用?