22// Licensed under the MIT License.
33
44using System . Collections ;
5+ using System . Collections . Concurrent ;
56using System . Collections . Generic ;
67using System . Text ;
78using Microsoft . CodeAnalysis . Text ;
@@ -31,6 +32,7 @@ private void EmitContextClass(ModelReaderWriterContextGenerationSpec contextGene
3132 {
3233 var contextName = contextGenerationSpec . Type . Name ;
3334 var namespaces = GetNameSpaces ( contextGenerationSpec ) ;
35+ namespaces . Add ( "System.Collections.Concurrent" ) ;
3436
3537 var indent = 0 ;
3638 var builder = new StringBuilder ( ) ;
@@ -59,7 +61,7 @@ private void EmitContextClass(ModelReaderWriterContextGenerationSpec contextGene
5961 builder . AppendLine ( $ "{ s_modelReaderWriterTypeBuilder } >> _typeBuilderFactories = new();") ;
6062
6163 builder . Append ( indent , "private readonly " ) ;
62- builder . AppendType ( typeof ( Dictionary < , > ) ) ;
64+ builder . AppendType ( typeof ( ConcurrentDictionary < , > ) ) ;
6365 builder . Append ( "<" ) ;
6466 builder . AppendType ( typeof ( Type ) ) ;
6567 builder . Append ( ", " ) ;
@@ -134,7 +136,7 @@ private void EmitContextClass(ModelReaderWriterContextGenerationSpec contextGene
134136 builder . AppendLine ( indent , "{" ) ;
135137 indent ++ ;
136138 builder . AppendLine ( indent , "builder = factory();" ) ;
137- builder . AppendLine ( indent , "_typeBuilders.Add (type, builder);" ) ;
139+ builder . AppendLine ( indent , "_typeBuilders.TryAdd (type, builder);" ) ;
138140 builder . AppendLine ( indent , "return true;" ) ;
139141 indent -- ;
140142 builder . AppendLine ( indent , "}" ) ;
@@ -147,7 +149,7 @@ private void EmitContextClass(ModelReaderWriterContextGenerationSpec contextGene
147149 builder . AppendLine ( indent , $ "if (kvp.Value.TryGetTypeBuilder(type, out builder))") ;
148150 builder . AppendLine ( indent , "{" ) ;
149151 indent ++ ;
150- builder . AppendLine ( indent , $ "_typeBuilders.Add (type, builder);") ;
152+ builder . AppendLine ( indent , $ "_typeBuilders.TryAdd (type, builder);") ;
151153 builder . AppendLine ( indent , "return true;" ) ;
152154 indent -- ;
153155 builder . AppendLine ( indent , "}" ) ;
0 commit comments