Como detectar quando o thread principal termina?
O que eu preciso saber:
Eu gostaria de detectar quando um thread principal (processo?) Termina para que eu possa garantir que certas ações sejam executadas antes de serem finalizadas.
O que eu me encontrei:
Eu encontrei os eventosAppDomain.DomainUnload
eAppDomain.ProcessExit
. AppDomain.DomainUnload
parece funcionar com não-aplicativos como o MbUnit.AppDomain.ProcessExit
parece funcionar com aplicativos, mas há um limite de tempo de 3 segundos que eu realmente não gosto. Há mais maneiras de detectar quando um AppDomain / processo termina?
Fundo:
Eu estou procurando por um evento para garantir que meu log é persistet para arquivar quando o aplicativo é encerrado. O log real é executado em outro encadeamento usando um padrão produtor-consumidor, em que é muito provável que entradas de log possam enfileirar-se na memória e eu preciso garantir que essa fila seja salva no arquivo quando o aplicativo for finalizado.
Há mais alguma coisa que eu deveria estar ciente?
Atualizar:
Mudou o acima para refletir o que eu descobri eu mesmo. Eu não estou feliz com o limite de tempo de 3 segundos durante o ProcessExit. A documentação do MSDN diz que ele pode ser estendido:
O tempo total de execução de todos os manipuladores de eventos do ProcessExit é limitado, assim como o tempo total de execução de todos os finalizadores é limitado no encerramento do processo. O padrão é três segundos, que podem ser substituídos por um host não gerenciado.
Alguém sabe como substituir o padrão?
Mais ideias também são muito apreciadas!
Acompanhamento: