Est-ce que changer la culture d'un fil de threadpool l'affecter quand il est retourné à la piscine?
-
13-09-2019 - |
Question
Si je mets le CurrentCulture
d'un fil de pool de threads, ce qui se passe quand le fil se termine l'exécution et est renvoyée à la piscine de fil? Est-il obtenir son CurrentCulture
réinitialisé à la valeur par défaut (quoi que cela puisse signifier), ou sera conserver la culture que j'ai mis là-dessus?
J'espère que le cadre remet à zéro le fil à un état par défaut pour se prémunir contre cela, mais ne trouve aucun document à cet effet. Le plus proche que j'ai trouvé est de la documentation MSDN pour ThreadPool :
Lorsque le pool de threads réutilise un fil, il ne voit pas clairement les données en fil stockage local ou dans les champs qui sont marqué par la ThreadStaticAttribute attribut. Par conséquent, les données qui placé dans le stockage local fil par une procédé peut être exposé à une autre méthode qui est exécutée par le même fil de pool de threads.
Cela semble indiquer que le fil est pas reset quand il est retourné.
J'ai essayé quelques exemples de code pour tenter de le tester, et fait semble que la culture est remis à zéro, mais je ne suis pas convaincu que je teste cela correctement le comportement que je pense que je ne suis en utilisant un petit sous-ensemble des fils du ThreadPool, et ne peut donc pas être sûr que je teste un fil qui a déjà eu son jeu de culture.
La solution
Je ne me fierais pas sur la ThreadPool jamais remise à zéro des informations, en particulier à cause du texte que vous avez cité.
Si vous êtes inquiet au sujet de « changer » la culture de la piscine de fil, je vous le faire réinitialiser lorsque votre tâche est terminée filetée. Ceci est une tâche assez simple.
Je ne crois pas que le threadpool actuel fait cela, mais même si elle fait , il ne serait pas raisonnable de supposer que .NET 4 + 's la mise en œuvre ThreadPool ne changera pas.