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;
}
}