L’accesso in scrittura ad un dictionary non è thread safe. In generale, se si utilizza un Dictionary<TKey,TValue> in .NET bisognerebbe loccare le operazioni di scrittura, e quelle di lettura se si suppone ci possano essere delle scritture/cancellazioni concomitanti. Tuttavia, utilizzare in modo “cieco” il lock, sia per le scritture che per le letture può avere dei decrementi di velocità. Ho trovato un’ottima e riconosciuta implementazione di un dictionary thread safe a questo indirizzo.