Os secadores podem ser usados para garantir que o finalize nunca seja chamado?
-
12-12-2019 - |
Pergunta
Temos um problema de interop muito complicado em que o fio usado para inicializar um sistema de terceiros tem que ser o mesmo fio usado para encerrá-lo. Não fazer isso resulta em um impasse. Estamos realizando a interop de um serviço WCF hospedado no IIS. Atualmente, esta limpeza é feita à disposição e normalmente funciona muito bem. Infelizmente, sob carga pesada, o IIS fará um descarregamento rude e nunca conseguimos ligar para disposições. Podemos mover a lógica de desligamento em um finalizador crítico, mas isso não ajuda, pois não temos mais acesso ao tópico inicializando! Neste momento, nosso único recurso parece estar notificando o CLR que o AppDomain é agora provável em um estado corrompido. No entanto, não tenho certeza de como fazer isso (ou se é até possível). Pode ser que esta seja a utilidade dos contratos em um nível de classe, mas admito que realmente não entendo completamente esses.
Editar: Alternativamente, isso pode ser visto como um problema de afinidade de rosca no finalizador. Se alguém tem uma solução inteligente para isso, sou todos os ouvidos :)
Solução
Tente dividir o código que depende dessa dependência nativa para um aplicativo de serviço do Windows independente, se possível.Se não puder funcionar bem com o WCF / IIS, você deve evitar os conflitos em vez de lutar contra ele.