Здравствуйте, AutumnLeaf, Вы писали:
AL>AL> public int Index
AL> {
AL> get
AL> {
AL> if (_index >= 0)
AL> {
AL> return _index;
AL> }
AL> lock (this)
AL> {
AL> if (_index < 0)
AL> {
AL> _index = Interlocked.Increment(ref _indexer._counter);
AL> }
AL> return _index;
AL> }
AL> }
AL> }
AL>
Менять значение внутри getter-а не самая лучшая идея, тем более мешая в одну кучу несинхронизированный доступ, lock и interlocked операции.
Лучше наверное передавать в конструктор Record сразу значение счётчика:
return _map.GetOrAdd(key, k => new Record(Interlocked.Increment(ref _counter))).Index;