Thread.Join nous renvoie si le thread est terminé. La même chose que nous pouvons déterminer en utilisant ThreadState. Alors, quelle est la différence entre Thread.Join() et Thread.ThreadState? Peut-on les utiliser de façon interchangeable?Thread.Join vs Thread.State
Répondre
La différence entre d'inscription et en regardant ThreadState
manuellement que Join
est une opération de blocage. La fonction ne retournera pas tant que le délai d'attente n'est pas atteint ou que la cible Thread
ne se termine pas. Vérification de ThreadState
est plus d'une opération furtivement.
Corrigez-moi si je me trompe, mais ThreadState n'est pas non plus fiable? – Josh
Ahh ... à partir de * MSDN: Il existe deux énumérations d'état de thread, System.Threading.ThreadState et System.Diagnostics.ThreadState. Les énumérations d'état de thread ne présentent qu'un intérêt dans quelques scénarios de débogage. Votre code ne doit jamais utiliser l'état du thread pour synchroniser les activités des threads. * http://msdn.microsoft.com/en-us/library/system.threading.threadstate.aspx – Josh
@Josh les deux ne sont pas fiables dans le sens où ils seulement fournir des informations sur le passé :) – JaredPar
Thread.join WAITS pour le fil à compléter. ThreadState vous donne juste un instantané du fil et revient sans attendre. Il y a aussi une variante de Thread.join qui prend du temps à attendre. ThreadState et Join sont extrêmement différents et je ne pense pas que les deux puissent être utilisés de manière interchangeable. Essayez de faire un test où vous faites les deux appels sur un thread qui a une boucle infinie.
Lorsque vous appelez Thread.Join()
, il bloque le thread appelant jusqu'à ce que le thread qui a la méthode Join est terminé. Si elle est annulée ou complétée avec succès, Join() qui suit ne bloquera pas le thread appelant. Cela vous permet d'avoir 10 threads de travail et un thread principal dont l'opération doit être exécutée une fois tous les 10 threads terminés. Vous pouvez donc appeler Join() sur le premier thread. Cet appel bloquera le thread principal jusqu'à la fin du premier thread de travail. Après cela, vous pouvez appeler Join() sur le deuxième thread, et ainsi de suite jusqu'à ce que vous arriviez à thread # 10. Lorsque vous appelez Join() dessus, et que le thread principal reprend, vous pouvez être sûr que les 10 threads terminés et le thread principal peuvent reprendre leur opération.
Par exemple:
Thread workers[] = new Thread[10];
//*** create and start threads ***
foreach(Thread worker in workers)
{
worker.Join();
}
//All threads are completed, now this operation can continue...
D'autre part, Thread.ThreadState
ne retourne que le thread status (Aborted, Courir, ...) sans affecter l'état de thread appelant (pas d'inscription qui met le thread appelant à WaitSleepJoin Etat). Donc, ceci est à utiliser uniquement si vous voulez vérifier ce qui se passe avec thread afin que vous puissiez prendre une certaine action, ou vous voulez implémenter votre propre mécanisme de jointure, et ainsi de suite ...
Thread.Join va bloquer l'appel thread
- 1. La méthode latch.await() de CountDownLatch vs Thread.join()
- 2. Java: comment utiliser Thread.join
- 3. Thread.join bloque le thread principal
- 4. Thread.Join sur plusieurs threads avec timeout
- 5. Pourquoi Thread.Join ne laisse pas passer les messages COM?
- 6. Dispatcher.Invoke se bloque lorsque le thread principal appelé Thread.Join
- 7. Est-ce que thread.join() bloquera également d'autres clients?
- 8. Thread.join ne se comporte pas comme je l'espérais dans scala
- 9. Quel est le comportement de Thread.join() dans Java si la cible n'a pas encore démarré?
- 10. Rhino simulé vs Typemock vs JustMock vs
- 11. Accumuler vs plier vs réduire vs compresser
- 12. inline vs __inline vs __inline__ vs __forceinline?
- 13. méthode vs fonction vs procédure vs classe?
- 14. MPAPI vs MPI.NET vs?
- 15. Mathematica: Unevaluated vs Différer vs vs attente HoldForm vs vs HoldAllComplete etc etc
- 16. InsertionSort vs InsertionSort vs BinaryInsertionSort
- 17. int vs NSNumber vs NSInteger
- 18. managedQuery() vs context.getContentResolver.query() vs android.provider.something.query()
- 19. Matlab vs Aforge vs OpenCV
- 20. CURL vs fopen vs fsocketopen?
- 21. T4 vs CodeDom vs Oslo
- 22. Flash vs Silverlight vs HTML5
- 23. Diffuser vs MPI vs zeromq?
- 24. apc_define_constants vs hidef vs define
- 25. SHMEM vs tmpfs vs mmap
- 26. XUL vs vs FLEX XAML
- 27. window.onload vs body.onload vs document.onready
- 28. Processing.js vs. CAKE vs. Raphael.js
- 29. BasicHttpBinding vs WSHttpBinding vs WebHttpBinding
- 30. iWebkit Vs JqueryMobile Vs JQtouch?
while (t.ThreadState! = ThreadState.Stopped) HaltAndCatchFire(); –