Por que Thread.Join () NÃO trava meu aplicativo quando chamado no thread da interface do usuário?

No meu entendimento (eu não sou bom em encadeamento), Join () bloqueia a chamada de thread até que a thread na qual Join () é chamada retorne.

Se isso for verdade e Join () for chamado a partir do thread da interface do usuário, a criação do novo thread para alguma operação de execução longa não faz sentido. Existem perguntas sobre SO que perguntam por que o Join () trava o aplicativo. Parece natural para mim.

A propósito, mesmo que pareça natural, meu aplicativo não se comporta de acordo. Não trava meu aplicativo.

Código sem encadeamento que trava o aplicativo: -

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

Código com thread que NÃO trava no aplicativo: -

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

O código acima funciona muito bem sem aplicação suspensa. A chamada de função leva cerca de 15 a 20 segundos. Por que o aplicativo não trava?

Isso não é um problema para mim; na verdade, é uma boa notícia. Mas eu simplesmente não entendo que diferença isso fez? Não corresponde ao que leio e aprendo.

Estou usando o DotNet Framework 4.0, se isso importa.

questionAnswers(1)

yourAnswerToTheQuestion