When does a multithreaded console application exit?

Solution 1:

A process ends when all foreground threads terminate

From Thread.IsBackground remarks on foreground threads vs background threads:

A thread is either a background thread or a foreground thread. Background threads are identical to foreground threads, except that background threads do not prevent a process from terminating. Once all foreground threads belonging to a process have terminated, the common language runtime ends the process. Any remaining background threads are stopped and do not complete.