Наконец не выполняется при вызове Thread.Abort
Кто-нибудь знает причину, по которой оператор finally не будет выполнен при вызове 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 это происходит каждый раз.
Кстати: на iOS происходит сбой, если я добавлю еще одну попытку {} catch {} в оператор finally.
Кто-нибудь знает, почему это происходит? Кажется, что это сильно отличается от того, что говорится в документации по Thread.Abort и ThreadAbortException.
1 ответ
Mono не поддерживает Области ограниченного выполнения и не полностью поддерживает catch/finally при вызове Thread.Abort.
Есть ошибка по этому поводу.