2

有谁知道调用 Thread.Abort 时不会执行 finally 语句的原因?我有这样的线程函数:

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

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

有谁知道为什么会这样?它似乎与 Thread.Abort 和 ThreadAbortException 的文档所说的完全不同。

4

1 回答 1

2

Mono 不支持受约束的执行区域,并且在调用 Thread.Abort 时不完全支持 catch/finally。

有一个关于这个的错误。

于 2014-11-20T23:25:39.160 回答