バックグラウンド:
私は 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
再帰的に呼び出されたことを検出するにはどうすればよいですか?