2014-11-20 3 views
2

Кто-нибудь знает причину, почему инструкция finally не будет выполняться при вызове Thread.Abort? У меня есть функция нити:, наконец, не выполняется при вызове Thread.Abort

void ThreadFunc() 
{ 
    try 
    { 
     int counter = 0; 
     while (true) 
     { 
      Debug.Log ("Waiting" + counter); 
      Thread.Sleep(100); 
      ++counter; 
     } 
     Debug.Log("Success."); 
    } 
    catch(ThreadAbortException ex) 
    { 
     Debug.LogWarning("Cancelled: " + ex); 
    } 
    catch(System.Exception ex) 
    { 
     Debug.LogError("Error: " + ex); 
    } 
    finally 
    { 
     Debug.Log("Finally"); 
    } 
} 

Я завершаю эту тему, используя Thread.Abort. Все, что я вижу на выходе, - это куча ожидания, но никаких других строк. Мой основной поток продолжает работать после вызова Thread.Abort (то есть дочерний поток имеет достаточно времени для завершения). Функции Debug.Log являются потокобезопасными.

Это происходит в Windows. Я использую Mono (движок игры Unity). На Mac это прекрасно работает. На iOS я получаю такое поведение, но, похоже, оно зависит от версии устройства/iOS или версии XCode (я еще не понял). В Windows это происходит каждый раз.

BTW: на iOS он сработает, если я положил еще try {} catch {} в окончательную инструкцию.

Кто-нибудь знает, почему это происходит? Похоже, что это совсем не то, о чем говорит документация Thread.Abort и ThreadAbortException.

ответ