private T GetValue(Thread thread) { if (Volatile.Read(ref _disposing) == 1) { throw new ObjectDisposedException(GetType().FullName); } INeedle <T> needle; if (_slots.TryGetOrAdd(thread, ThreadLocalHelper <T> .RecursionGuardNeedle, out needle)) { try { needle = new ReadOnlyStructNeedle <T>(_valueFactory.Invoke()); } catch (Exception exception) { if (exception != ThreadLocalHelper.RecursionGuardException) { needle = new ExceptionStructNeedle <T>(exception); } } _slots.Set(thread, needle); } return(needle.Value); }
TValue IDictionary <ReadOnlyStructNeedle <TKey>, TValue> .this[ReadOnlyStructNeedle <TKey> key]
public TValue this[ReadOnlyStructNeedle <TKey> key] => Dictionary[key];
bool ICollection <ReadOnlyStructNeedle <TKey> > .Remove(ReadOnlyStructNeedle <TKey> item) { throw new NotSupportedException(); }
bool ICollection <ReadOnlyStructNeedle <TKey> > .Contains(ReadOnlyStructNeedle <TKey> item) { return(_wrapped.Contains(item)); }
void ICollection <ReadOnlyStructNeedle <TKey> > .Add(ReadOnlyStructNeedle <TKey> item) { throw new NotSupportedException(); }