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

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


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


_FR>>>>И не напоминайте

_NN>>>У вас есть код, которому нужен именно Thread.Abort и нет возможности переписать с использованием CancellationToken или другого аналога ?
_NN>>>Всегда есть хардкор вариант DllImport TerminateThread, но зачем

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

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

_NN>Это не поможет разве что управление потом возвращается в управляемый код, а там уже и CancellationToken можно поставить.

_NN>

_NN>If Abort is called on a managed thread while it is executing unmanaged code, a ThreadAbortException is not thrown until the thread returns to managed code.


_NN>https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread.abort?redirectedfrom=MSDN&view=net-5.0#System_Threading_Thread_Abort


В потоке который создан CLR прекрасно работают реально бросаю Thread.Abort перехватываю ThreadAbortException и вызываю ResetAbort
https://docs.microsoft.com/ru-ru/dotnet/standard/threading/managed-and-unmanaged-threading-in-windows

Управление всеми потоками осуществляется посредством класса Thread , включая потоки, созданные средой CLR или созданные за пределами среды выполнения и входящие в управляемую среду для выполнения кода. Среда выполнения отслеживает в своем процессе все потоки, которые когда-либо выполняли код в управляемой среде. Другие потоки она не отслеживает. Потоки могут входить в управляемую среду выполнения посредством COM-взаимодействия (так как среда выполнения предоставляет управляемые объекты неуправляемой среде в качестве COM-объектов), функции COM DllGetClassObject и вызова неуправляемого кода.
Когда неуправляемый поток входит в среду выполнения, например, посредством вызываемой оболочки COM, система проверяет локальное хранилище потока данного потока для поиска внутреннего управляемого объекта Thread . Если он найден, среда выполнения уже оповещена об этом потоке. Если найти объект не удается, среда выполнения создает новый объект Thread и устанавливает его в локальном хранилище потока данного потока.



В следующей таблице элементы потоков Win32 сопоставляются со своими ближайшими аналогами из среды выполнения. Обратите внимание, что такое сопоставление не означает идентичную функциональность. Например, TerminateThread не выполняет предложения finally , не освобождает ресурсы и не может быть запрещен. Однако Thread.Abort выполняет весь ваш код отката, освобождает все ресурсы и может быть отменен с помощью ResetAbort. Прежде чем делать предположения о функциональности, тщательно изучите документацию.

и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.