Example #1
0
        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);
        }
Example #2
0
 TValue IDictionary <ReadOnlyStructNeedle <TKey>, TValue> .this[ReadOnlyStructNeedle <TKey> key]
Example #3
0
 public TValue this[ReadOnlyStructNeedle <TKey> key] => Dictionary[key];
Example #4
0
 bool ICollection <ReadOnlyStructNeedle <TKey> > .Remove(ReadOnlyStructNeedle <TKey> item)
 {
     throw new NotSupportedException();
 }
Example #5
0
 bool ICollection <ReadOnlyStructNeedle <TKey> > .Contains(ReadOnlyStructNeedle <TKey> item)
 {
     return(_wrapped.Contains(item));
 }
Example #6
0
 void ICollection <ReadOnlyStructNeedle <TKey> > .Add(ReadOnlyStructNeedle <TKey> item)
 {
     throw new NotSupportedException();
 }