¿Por qué Thread.Join () NO bloquea mi aplicación cuando se llama en el hilo de la interfaz de usuario?

En mi entendimiento (no soy bueno en subprocesos), Join () bloquea el subproceso de llamada hasta que se devuelve el subproceso en el que se llama Join ().

Si eso es cierto y se llama a Join () desde el subproceso de la interfaz de usuario, crear el nuevo subproceso para alguna operación de larga ejecución no tiene ningún sentido. Hay preguntas sobre SO que preguntan por qué Join () bloquea la aplicación. A mí me parece natural.

Por cierto, aunque parezca natural, mi aplicación no se comporta en consecuencia. No cuelga mi aplicación.

Código sin hilo que cuelga la aplicación: -

string retValue = "";
retValue = LongRunningHeavyFunction();
txtResult.Text = retValue;

Código con hilo que NO bloquea la aplicación: -

string retValue = "";
Thread thread = new Thread(
() =>
{
    retValue = LongRunningHeavyFunction();
});
thread.Start();
thread.Join();
txtResult.Text = retValue;

El código anterior funciona muy bien sin colgar la aplicación. La llamada a la función tarda unos 15-20 segundos. ¿Por qué la aplicación no se cuelga?

Esto no es un problema para mí; En realidad es una buena noticia. Pero simplemente no entiendo qué diferencia hizo? No coincide con lo que leo y aprendo.

Estoy usando DotNet Framework 4.0 si eso importa.

Respuestas a la pregunta(1)

Su respuesta a la pregunta