gpt4 book ai didi

windows - finally 在调用 Thread.Abort 时不执行

转载 作者:可可西里 更新时间:2023-11-01 10:21:46 26 4
gpt4 key购买 nike

有谁知道调用 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 的文档中所说的有很大不同。

最佳答案

单声道不支持 Constrained Execution Regions并且在调用 Thread.Abort 时不完全支持 catch/finally。

有一个bug关于这个。

关于windows - finally 在调用 Thread.Abort 时不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27050342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com