Для начала, это был не совсем их выбор.Это решение было принято задолго до того, как они начали, культура - это свойство потока операционной системы.Посмотрите, например, документы SDK для API-функций Get / SetThreadLocale ().
Это не полностью объясняет это, они виртуализировали другие функции ОС, хотя эта * очень жесткаявиртуализировать, потому что очень много API-интерфейсов чувствительны к культуре, особенно COM.
Следующая веская причина в том, что изменение всего процесса культуры очень сложно реализовать.Это неразрешимое состояние гонки.Какой-то другой поток вполне может быть в середине форматирования данных, имеющих сходство с культурой.В то время как блокировка будет работать для предотвращения использования свойств культуры точно так же, как она изменяется, она может не предотвращать ее изменение в середине цепочки вызовов форматирования.Это потребовало бы, чтобы они взяли некоторую глобальную блокировку и держали ее в течение всего времени работы форматирования.Вероятность тупика очень вероятна.
Есть еще один аспект, который, я думаю, является реальной проблемой.Это связано со свойством Thread.ExecutionContext.Каркас использует это для «передачи» состояния потока из одного потока в другой.Очень непонятно, но важно внедрить такие вещи, как контекст безопасности, в рабочий поток.Было бы идеально, если бы этот контекст мог также наполнить культуру, чтобы вы могли быть уверены, что любой из рабочих, с которыми вы начинаете работать, имеет ту же культуру, которую вы выбрали, а не операционную систему по умолчанию.
Это не так,Я действительно не знаю почему.Вероятно, потому что самая первая причина, которую я дал.Это делает однако делает очень опасным изменение культуры потока.Виды ошибок, которые могут вызывать очень тонкие.Как создание SortedDictionary со строкой в качестве ключа в главном потоке с культурой по умолчанию не операционной системы.Затем выясняется, что рабочий поток больше не может время от времени находить материал, потому что правила сортировки строк отличаются.
РЕДАКТИРОВАТЬ: в .NET 4.5 есть некоторая облегчение этой проблемы, он поддерживает новую статическуюСвойства CultureInfo.DefaultThreadCurrentCulture и DefaultThreadCurrentUICulture.
EDIT2: культура теперь работает, как описано в 4-м абзаце в .NET 4.6.Это должно облегчить все проблемы.