using System.Collections.Generic; internal class SafeDictionary { private readonly object _Padlock = new object(); private readonly Dictionary _Dictionary; public TValue this[TKey key] { get { lock (_Padlock) { return _Dictionary[key]; } } set { lock (_Padlock) { _Dictionary[key] = value; } } } public SafeDictionary(int capacity) { _Dictionary = new Dictionary(capacity); } public SafeDictionary() { _Dictionary = new Dictionary(); } public bool TryGetValue(TKey key, out TValue value) { lock (_Padlock) { return _Dictionary.TryGetValue(key, out value); } } public void Add(TKey key, TValue value) { lock (_Padlock) { if (!_Dictionary.ContainsKey(key)) { _Dictionary.Add(key, value); } } } }