コード例 #1
0
 public ThreadStaticValue(ThreadStatic <T> key, T value, ThreadStaticValue previous)
 {
     threadId      = Thread.CurrentThread.ManagedThreadId;
     this.key      = key;
     this.value    = value;
     this.previous = previous;
 }
コード例 #2
0
        public IDisposable Use(T value)
        {
            ThreadStaticValue old;

            ThreadStatics.TryGetValue(this, out old);
            return(ThreadStatics[this] = new ThreadStaticValue(this, value, old));
        }
コード例 #3
0
 private void DisposeCurrentScope(ThreadStaticValue valueToDispose)
 {
     valueToDispose.MarkAsDisposed();
     if (valueToDispose.previous == null)
     {
         ThreadStatics.Remove(this);
     }
     else
     {
         ThreadStatics[this] = valueToDispose.previous;
     }
 }
コード例 #4
0
 private void DisposeScope(ThreadStaticValue valueToDispose)
 {
     if (Thread.CurrentThread.ManagedThreadId != valueToDispose.threadId)
     {
         throw new DisposingOnDifferentThreadToCreation();                 // ncrunch: no coverage
     }
     ThreadStatics.TryGetValue(this, out innerMost);
     while (innerMost != valueToDispose)
     {
         DisposeInnerMostScopes();
     }
     DisposeCurrentScope(valueToDispose);
 }
コード例 #5
0
 private void DisposeInnerMostScopes()
 {
     innerMost.MarkAsDisposed();
     innerMost = innerMost.previous;
 }