Можно ли прервать поток .NET между методом, возвращающим и присваивающим его возвращаемое значение? - PullRequest
0 голосов
/ 02 января 2019

Теоретически возможно, что что-то прервет поток .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?

...