Я использую Mutex, чтобы убедиться, что веб-сервис работает только один раз, но я не могу сделать это на 100% правильно с WaitOnce и ReleaseMutex.
У меня есть это:
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;
}
Если я попытаюсь сразу дважды получить доступ к веб-сервису, второй вызов не возвращает false, но я получаю исключение ApplicationException от mutex.ReleaseMutex («метод воззвания объектов был вызван из синхронизированного кодового блока» - грубо переводится с шведского)
Какой лучший способ сделать это?