@@ -148,17 +148,16 @@ internal static void AsyncLocalSetCurrentUICulture(AsyncLocalValueChangedArgs<Cu
148148 internal const int LOCALE_CUSTOM_DEFAULT = 0x0c00 ;
149149 internal const int LOCALE_INVARIANT = 0x007F ;
150150
151- //
152- // The CultureData instance that reads the data provided by our CultureData class.
153- //
154- // Using a field initializer rather than a static constructor so that the whole class can be lazy
155- // init.
156- private static readonly bool init = Init ( ) ;
157- private static bool Init ( )
151+ private static CultureInfo InitializeUserDefaultCulture ( )
158152 {
159- s_userDefaultCulture = GetUserDefaultCulture ( ) ;
160- s_userDefaultUICulture = GetUserDefaultUILanguage ( ) ;
161- return true ;
153+ Interlocked . CompareExchange ( ref s_userDefaultCulture , GetUserDefaultCulture ( ) , null ) ;
154+ return s_userDefaultCulture ;
155+ }
156+
157+ private static CultureInfo InitializeUserDefaultUICulture ( )
158+ {
159+ Interlocked . CompareExchange ( ref s_userDefaultUICulture , GetUserDefaultUICulture ( ) , null ) ;
160+ return s_userDefaultUICulture ;
162161 }
163162
164163 ////////////////////////////////////////////////////////////////////////
@@ -167,7 +166,6 @@ private static bool Init()
167166 //
168167 ////////////////////////////////////////////////////////////////////////
169168
170-
171169 public CultureInfo ( String name )
172170 : this ( name , true )
173171 {
@@ -423,34 +421,9 @@ internal static CultureInfo GetCurrentUICultureNoAppX()
423421 return UserDefaultUICulture ;
424422 }
425423
426- internal static CultureInfo UserDefaultUICulture
427- {
428- get
429- {
430- // if s_userDefaultUICulture == null means CultureInfo statics didn't get initialized yet. this can happen if there early static
431- // method get executed which eventually hit the cultureInfo code while CultureInfo statics didn’t get chance to initialize
432- if ( s_userDefaultUICulture == null )
433- {
434- Init ( ) ;
435- }
436-
437- Debug . Assert ( s_userDefaultUICulture != null ) ;
438- return s_userDefaultUICulture ;
439- }
440- }
424+ internal static CultureInfo UserDefaultUICulture => s_userDefaultUICulture ?? InitializeUserDefaultUICulture ( ) ;
441425
442- public static CultureInfo InstalledUICulture
443- {
444- get
445- {
446- if ( s_userDefaultCulture == null )
447- {
448- Init ( ) ;
449- }
450- Debug . Assert ( s_userDefaultCulture != null , "[CultureInfo.InstalledUICulture] s_userDefaultCulture != null" ) ;
451- return s_userDefaultCulture ;
452- }
453- }
426+ public static CultureInfo InstalledUICulture => s_userDefaultCulture ?? InitializeUserDefaultCulture ( ) ;
454427
455428 public static CultureInfo DefaultThreadCurrentCulture
456429 {
@@ -920,7 +893,9 @@ public virtual DateTimeFormatInfo DateTimeFormat
920893
921894 public void ClearCachedData ( )
922895 {
923- Init ( ) ; // reset the default culture values
896+ // reset the default culture values
897+ s_userDefaultCulture = GetUserDefaultCulture ( ) ;
898+ s_userDefaultUICulture = GetUserDefaultUICulture ( ) ;
924899
925900 RegionInfo . s_currentRegionInfo = null ;
926901 #pragma warning disable 0618 // disable the obsolete warning
0 commit comments