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.