/// <summary> /// Updates or creates cached binary type holder. /// </summary> private void UpdateOrCreateBinaryTypeHolder(BinaryType meta) { BinaryTypeHolder holder; if (_metas.TryGetValue(meta.TypeId, out holder)) { holder.Merge(meta); return; } lock (this) { if (_metas.TryGetValue(meta.TypeId, out holder)) { holder.Merge(meta); return; } var metas0 = new Dictionary <int, BinaryTypeHolder>(_metas); holder = new BinaryTypeHolder(meta.TypeId, meta.TypeName, meta.AffinityKeyFieldName, meta.IsEnum, this); holder.Merge(meta); metas0[meta.TypeId] = holder; _metas = metas0; } }