2009-09-23 6 views
7

Si configuro el CurrentCulture de un hilo del grupo de subprocesos, ¿qué sucede cuando el subproceso finaliza la ejecución y se devuelve al grupo de subprocesos? ¿Se restablece su CurrentCulture de nuevo al valor predeterminado (lo que sea que eso signifique), o conservará la cultura que he establecido en él?¿La modificación de la cultura de un subproceso de subprocesos lo afecta cuando se devuelve al grupo?

Espero que el marco restablezca el hilo a un estado predeterminado para evitar esto, pero no puede encontrar ninguna documentación para este efecto. El más cercano que he encontrado es a partir de la documentación de MSDN para ThreadPool:

Cuando el grupo de subprocesos vuelve a utilizar un hilo, No limpie los datos en hilo almacenamiento local o en campos que son marcados con el ThreadStaticAttribute atributo. Por lo tanto, los datos que están colocados en el almacenamiento local de subprocesos mediante un método pueden exponerse a cualquier otro método que se ejecute con el mismo subproceso de grupo de subprocesos .

Esto parece indicar que el hilo es no reinicio cuando se devuelve.

He intentado un código de muestra para intentar probar esto, y hace parece que la cultura se restablece, pero no estoy convencido de que estoy probando este comportamiento correctamente, ya que creo que solo estoy usando un pequeño subconjunto de los subprocesos de ThreadPool, por lo que no puedo estar seguro de que estoy probando un hilo que ya tuvo su cultura establecida.

+0

Ligeramente relacionado, pero principalmente como referencia: http://twitter.com/#!/Wintellectuals/status/27733481381 – adrianbanks

Respuesta

8

No confiaría en el ThreadPool alguna vez restableciendo información, específicamente por el texto que citó.

Si le preocupa "cambiar" el cultivo del grupo de subprocesos, me aseguraré de reiniciarlo cuando se complete la tarea de subprocesos. Esta es una tarea bastante simple.

No creo que el threadpool actual haga esto, pero incluso si hiciera, no sería seguro asumir que la implementación de .NET 4 + ThreadPool no cambiará.

+0

Esto es más bien una pregunta teórica. No estoy haciendo esto, pero me encontré con una situación en la que un nuevo hilo se ejecuta en una cultura diferente al hilo principal (como es el comportamiento especificado). Tenía curiosidad por saber qué sucede, ya que sería fácil olvidar restablecer la cultura una vez que se completa el hilo. – adrianbanks

+1

Cuando ThreadPool crea nuevos subprocesos, usarán el entorno cultural del dominio de aplicación que contiene el subproceso. Cambiarlo, por cierto, persiste, pero nunca se sabe si se va a "reutilizar" ese hilo, y el grupo de hilos retiene los hilos, por lo que está causando un comportamiento indefinido e impredecible. –

+0

@Reed Copsey - En este caso, ¿cómo puedo encontrar la "cultura del AppDomain". Puedo encontrar una referencia a la cultura de un subproceso, pero no al dominio de la aplicación. La razón por la que pregunto es que estoy usando la API System.Threading.Task para crear tareas en segundo plano y creo que la implementación predeterminada usa ThreadPool. Los hilos que se engendran parecen tener la cultura del sistema predeterminada, en lugar de cualquier cultura que he establecido en los hilos padres. Quería una forma de establecer la cultura predeterminada para toda la aplicación, pero no he encontrado la manera de hacerlo. –

Cuestiones relacionadas