diff --git a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs b/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs index be93329178..9b646e2cf3 100644 --- a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs +++ b/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs @@ -3,6 +3,7 @@ using System; using System.Collections; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; using System.Reflection; @@ -15,9 +16,10 @@ namespace Microsoft.Extensions.Localization /// An that uses the and /// to provide localized strings. /// + /// This type is thread-safe. public class ResourceManagerStringLocalizer : IStringLocalizer { - private readonly Dictionary _missingManifestCache = new Dictionary(); + private readonly ConcurrentDictionary _missingManifestCache = new ConcurrentDictionary(); private readonly IResourceNamesCache _resourceNamesCache; private readonly ResourceManager _resourceManager; private readonly AssemblyWrapper _resourceAssemblyWrapper; @@ -185,7 +187,7 @@ namespace Microsoft.Extensions.Localization } catch (MissingManifestResourceException) { - _missingManifestCache.Add(cacheKey, null); + _missingManifestCache.TryAdd(cacheKey, null); return null; } }