public void Load(ITemplateTableLoader <TKey, TValue> loader) { var table = new ConcurrentDictionary <TKey, ValueData>(); foreach (var i in loader.Load()) { bool added; if (i.Value.Value != null) { added = table.TryAdd(i.Key, new ValueData { Value = i.Value.Value }); } else if (i.Value.LazyLoader != null) { added = table.TryAdd(i.Key, new ValueData { LazyLoader = i.Value.LazyLoader }); } else { throw new InvalidOperationException("Empty:" + i.Key); } if (added == false) { throw new InvalidOperationException("Duplicate:" + i.Key); } } _table = table; _ghostTable = new ConcurrentDictionary <TKey, TValue>(); }
public void Update(ITemplateTableLoader <TKey, TValue> loader) { foreach (var i in loader.Load()) { if (i.Value.Value != null) { _table[i.Key] = new ValueData { Value = i.Value.Value }; } else if (i.Value.LazyLoader != null) { _table[i.Key] = new ValueData { LazyLoader = i.Value.LazyLoader }; } else { ValueData data; _table.TryRemove(i.Key, out data); } } }