Mutex を使用して Web サービスが一度に 1 回だけ実行されるようにしていますが、WaitOnce と ReleaseMutex では 100% 正しく実行できません。
私はこれを持っています:
private static Mutex mutex = new Mutex();
[WebMethod]
public bool TriggerAll()
{
bool ranJobs = false;
try
{
if (mutex.WaitOne(0, false))
{
Thread.Sleep(10000); // simulate a long operation
ranJobs = true;
}
}
finally
{
mutex.ReleaseMutex();
}
return ranJobs;
}
すぐに Web サービスに 2 回アクセスしようとすると、2 回目の呼び出しで false が返されませんが、mutex.ReleaseMutex から ApplicationException が発生します ("objectsyncronization メソッドが onsyncronized コードブロックから呼び出されました" - スウェーデン語から大まかに翻訳)
これを行う最善の方法は何ですか?