O CLR considera que existem dois tipos de threads: foreground e background threads.
Foreground threads executam com uma prioridade elevada. Esse tipo de thread evita que a aplicação se encerre antes que tenham executado todo o seu trabalho.
Em contraponto, as background threads não são executadas com prioridade elevada. Background threads são finalizada imediatamente pelo CLR assim que todas as foreground threads de uma aplicação (leia managed assembly) encerram sua execução, sem lançar nenhuma exceção.