Para empezar, no fue realmente su elección. Esa decisión se tomó mucho antes de que comenzaran, la cultura es propiedad de un hilo del sistema operativo. Revise los documentos SDK para las funciones API Get/SetThreadLocale() por ejemplo.
eso no explica por completo, se han virtualizado otras funciones del sistema operativo, aunque que éste es muy duro para virtualizar porque muchas API son sensibles a la cultura, especialmente los COM.
La siguiente buena razón es porque cambiar la cultura en todo el proceso es extremadamente difícil de implementar. Es una condición de carrera insoluble. Algún otro subproceso podría estar en medio de datos de formato que tienen afinidad cultural. Mientras que un bloqueo funcionaría para evitar que use propiedades de cultivo tal como está cambiando, puede no evitar que cambie en el medio de una cadena de llamadas de formateo. Les requeriría tomar algún tipo de bloqueo global y mantenerlo mientras dure el trabajo de formateo. El punto muerto es muy probable.
Hay otro aspecto en esto, uno que creo que es el problema real. Está relacionado con la propiedad Thread.ExecutionContext. El marco usa esto para "fluir" el estado del hilo de un hilo a otro. Muy oscuro pero importante para imbuir cosas como el contexto de seguridad en un hilo de trabajo. Hubiera sido ideal si ese contexto también pudiera imbuir la cultura para que pueda estar seguro de que cualquiera de los trabajadores que comience tiene la misma cultura que seleccionó y no el sistema operativo predeterminado.
No, realmente no sé por qué. Probablemente porque la primera razón que di. Eso hace sin embargo, es muy peligroso cambiar la cultura de un hilo. El tipo de errores que pueden causar son muy sutil. Como crear un SortedDictionary con una cadena como la clave en su hilo principal con una cultura predeterminada del sistema no operativo. Luego descubriendo que un hilo de trabajo no puede encontrar cosas de vez en cuando porque las reglas de clasificación de las cuerdas son diferentes.
EDIT: hay algo de alivio de este problema en .NET 4.5, es compatible con el nuevo CultureInfo.DefaultThreadCurrentCulture estático y propiedades DefaultThreadCurrentUICulture.
EDIT2: culture fluye ahora como se describe en el 4to párrafo en .NET 4.6. Esto debería aliviar todas las preocupaciones.