public IDisposable Use(T value) { ThreadStaticValue old; ThreadStatics.TryGetValue(this, out old); return(ThreadStatics[this] = new ThreadStaticValue(this, value, old)); }
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); }