Supposons que j'ai un code comme suit :
int Main()
{
if (true)
{
new Thread(()=>
{
doSomeLengthyOperation();
}).Start();
}
while (true)
{
//do nothing
}
}
Il y a 2 threads, je vais appeler le thread principal, le thread qui exécute la fonction Main(), et le thread qui se trouve à l'intérieur du test "if" comme Thread A.
Ma question est la suivante : quand le fil A est-il détruit ? La fonction doSomeLenghtyOperation() pourra-t-elle être exécutée jusqu'à son terme ?
Étant donné qu'aucune référence ne pointe vers le fil A, celui-ci sera-t-il marqué comme candidat à la collecte des déchets ?
- Immédiatement après la fin de l'instruction "new Thread().Start()" elle-même ?
- Immédiatement après la sortie de l'étendue "if(true)" ?
- Après la fin de l'exécution de doSomeLengthOperation() ?
- Jamais ?
Dans tous les exemples que je vois, Main() conserve la référence, puis le thread principal attend de rejoindre le thread A avant de se terminer. Je suis curieux de savoir quelle est la durée de vie du code ci-dessus.
Merci d'avance !