Re[7]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 20.11.20 16:36
Оценка: :)
Здравствуйте, pilgrim_, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


S>>Для примера есть системный код который зависает по неизвестным причинам. При этом нет никакого async и CancellationToken. Можно по истечении времени кинуть Thread.Abort отловить его и сделать Thread.ResetAbort

S>>Во всяком случае можно дальше работать или отвиснуть поток, что бы не копились

_>Если "системный код" — это неуправляемый код, то Thread.Abort тут ничем не поможет, т.к. Thread.Abort реализован средствами CLR (соотв. никак не связан с TerminateThread) — проставляется спец. флаг что требуется Abort, который в определенных, хз каких, местах исполняемого кода проверяется, известно только где не проверяется (catch, finnaly, CER, неуправляемый код, может где еще). По этому флагу и генерится исключение ThreadAbortException, который можно перехватить и да, сбросить его (ResetAbort).


Как это не поможет. Есть два пути
1. В основном коде вызываем в try catch и запускаем наблюдающий поток и если завис бросаем Thread.Abort
2. Запускаем отдельный поток в котором в блоке try catch вызывается проблемная функция и через таймаут бросаем Thread.Abort.

Реально Thread.Abort в связке Thread.ResetAbort работает и в основном потоке. Практика!
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.