Теоретически возможно, что что-то прервет поток .NET (например, ThreadAbortException) между возвратом метода и присвоением его возвращаемого значения локальному?
Например, является ли этот следующий код безопасным или возможно, что myMutex.WaitOne()
получает мьютекс и возвращает true
, но возникает исключение, прежде чем это значение true
будет присвоено mutexAcquired
и, следовательно, полученному мьютексу не выпущен?
bool mutexAcquired = false;
try
{
mutexAcquired = myMutex.WaitOne(1000);
if (!mutexAcquired)
throw new Exception();
// OK, do some stuff...
}
finally
{
if (mutexAcquired)
myMutex.ReleaseMutex();
}
Если это безопасно, то как насчет следующего кода?
if (!myMutex.WaitOne(1000))
throw new Exception();
try
{
// OK, do some stuff...
}
finally
{
myMutex.ReleaseMutex();
}
Опять же, возможно ли для myMutex.WaitOne()
вернуть значение true, но для исключения ThreadAbortException (или аналогичного) на if
до ввода блока try
?