У меня есть приложение .NET C # / C ++, которое использует вызов exit(0)
(из <stdlib.h>
) в потоке для завершения.
Странная часть заключается в том, что при некоторых обстоятельствах финализаторы управляемых объектов вызываются сразу после вызова exit
, а в других случаях они вообще не вызываются.
Обстоятельства довольно детерминированы - приложение вызывает некоторые методы из внешнего плагина dll (написанного на неуправляемом C) в течение его жизни.
Если я использую dll A, финализаторы всегда вызываются.
Если я использую dll B, финализаторы никогда не вызываются.
Каково ожидаемое поведение финализаторов в случае вызова exit (0)? (если есть ожидаемое и документированное поведение)
Могут ли вызовы внешних библиотек изменить некоторые глобальные настройки, которые могут повлиять на способ завершения процесса?