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