Я использую параллельный словарь в качестве поточно-безопасного статического кеша и заметил следующее поведение:
Если вы вызываете GetOrAdd одновременно на разные потоки, addValueFactory может вызываться несколько раз, но его пара ключ/значение не может быть добавлен в словарь для каждого вызова.
Я хотел бы иметь возможность гарантировать, что factory вызывается только один раз. Есть ли способ сделать это с помощью API ConcurrentDictionary, не прибегая к моей отдельной отдельной синхронизации (например, блокировки внутри valueFactory)?
Моим вариантом использования является то, что valueFactory генерирует типы внутри динамического модуля, поэтому, если два значенияFactories для одного и того же ключа запускаются одновременно:
System.ArgumentException: дублировать имя типа в сборке.