Le stockage local de threads est-il conservé entre les invocations de travailleurs de fond?

Les threads d’arrière plan sont-ils réutilisés?

Plus précisément, si je définis un emplacement de données nommé (unité de stockage locale) au cours de la méthode DoWork () d’un arrière-plan, la valeur de cet emplacement de données persistera-t-elle, pouvant éventuellement être trouvée ultérieurement, d’un autre thread?

Je ne l’aurais pas pensé, mais j’ai un bug …

EDIT: Ce billet de blog suggère que BackGroundWorker utilise un ThreadPool , ce qui implique que les Threads sont réutilisés. Alors la question devient; les threads réutilisés peuvent-ils potentiellement conserver le stockage local des threads entre les invocations?

Lorsque le pool de threads réutilise un thread, il n’efface pas les données du stockage local du thread ou des champs marqués de l’atsortingbut ThreadStaticAtsortingbute. Par conséquent, les données placées dans le stockage local de threads par une méthode peuvent être exposées à toute autre méthode exécutée par le même thread de pool de threads. Une méthode qui accède à un champ marqué avec l’atsortingbut ThreadStaticAtsortingbute peut rencontrer des données différentes en fonction du thread qui l’exécute.

source: http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx

Aurait besoin de vérifier la source (ou via Reflector) pour déterminer si elle n’est pas spécifiée dans MSDN.

S’il n’est pas spécifié, vous ne pouvez pas compter sur le comportement actuel, qui ne changera pas dans une future version de .NET.

Edit: on dirait qu’il utilise le pool de threads, les threads seront donc réutilisés.