2014-11-20 38 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上,它每次都会发生。

顺便说一句:如果我把另一个try {} catch {}放入finally语句,它会崩溃。

有人知道为什么会发生这种情况吗?它似乎与Thread.Abort和ThreadAbortException的文档中所说的完全不同。

回答