Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / ThreadSafeList.cs / 1305376 / ThreadSafeList.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Threading; namespace System.Data.Common.Utils { internal sealed class ThreadSafeList: IList { private readonly ReaderWriterLockSlim _lock; private List _list; internal ThreadSafeList() { _list = new List (); _lock = new ReaderWriterLockSlim(); } public int Count { get { _lock.EnterReadLock(); int count; try { count = _list.Count; } finally { _lock.ExitReadLock(); } return count; } } public void Add(T item) { _lock.EnterWriteLock(); try { _list.Add(item); } finally { _lock.ExitWriteLock(); } } public T this[int index] { get { _lock.EnterReadLock(); T result; try { result = _list[index]; } finally { _lock.ExitReadLock(); } return result; } set { _lock.EnterWriteLock(); try { _list[index] = value; } finally { _lock.ExitWriteLock(); } } } public bool IsReadOnly { get { return false; } } public int IndexOf(T item) { _lock.EnterReadLock(); int result; try { result = _list.IndexOf(item); } finally { _lock.ExitReadLock(); } return result; } public void Insert(int index, T item) { _lock.EnterWriteLock(); try { _list.Insert(index, item); } finally { _lock.ExitWriteLock(); } } public void RemoveAt(int index) { _lock.EnterWriteLock(); try { _list.RemoveAt(index); } finally { _lock.ExitWriteLock(); } } public void Clear() { _lock.EnterWriteLock(); try { _list.Clear(); } finally { _lock.ExitWriteLock(); } } public bool Contains(T item) { _lock.EnterReadLock(); bool result; try { result = _list.Contains(item); } finally { _lock.ExitReadLock(); } return result; } public void CopyTo(T[] array, int arrayIndex) { _lock.EnterWriteLock(); try { _list.CopyTo(array, arrayIndex); } finally { _lock.ExitWriteLock(); } } public bool Remove(T item) { _lock.EnterWriteLock(); bool result; try { result = _list.Remove(item); } finally { _lock.ExitWriteLock(); } return result; } public IEnumerator GetEnumerator() { _lock.EnterReadLock(); try { foreach (T value in _list) { yield return value; } } finally { _lock.ExitReadLock(); } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return this.GetEnumerator(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RemotingService.cs
- Win32.cs
- StackOverflowException.cs
- XmlLanguageConverter.cs
- ClonableStack.cs
- WebPartZone.cs
- XmlSchemaComplexType.cs
- EllipseGeometry.cs
- SmiXetterAccessMap.cs
- ImplicitInputBrush.cs
- ScriptControlManager.cs
- ExceptionHelpers.cs
- RefType.cs
- InputBinder.cs
- MultipartIdentifier.cs
- DiagnosticsElement.cs
- VariableQuery.cs
- XmlSchemaAll.cs
- RequestCache.cs
- LowerCaseStringConverter.cs
- BitmapEffect.cs
- Rotation3D.cs
- CanExecuteRoutedEventArgs.cs
- PropertyRef.cs
- TrustSection.cs
- ImageClickEventArgs.cs
- ProxyManager.cs
- XmlComment.cs
- WeakReferenceEnumerator.cs
- ToolStripDropDown.cs
- XmlNodeList.cs
- WebPartCatalogCloseVerb.cs
- ImageConverter.cs
- StyleSelector.cs
- EventManager.cs
- Nullable.cs
- CodePropertyReferenceExpression.cs
- SqlErrorCollection.cs
- HtmlInputRadioButton.cs
- JavaScriptString.cs
- TreeNodeCollectionEditor.cs
- DataGridItem.cs
- LockCookie.cs
- TCPClient.cs
- _ProxyRegBlob.cs
- EventArgs.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- DataObjectSettingDataEventArgs.cs
- AVElementHelper.cs
- OleDbParameterCollection.cs
- ControlIdConverter.cs
- Point3DAnimationBase.cs
- WmlValidatorAdapter.cs
- WeakReference.cs
- webeventbuffer.cs
- MetadataSerializer.cs
- RunInstallerAttribute.cs
- MimeTextImporter.cs
- XmlTypeMapping.cs
- XmlDataSourceView.cs
- While.cs
- ExtensibleSyndicationObject.cs
- TemplateControl.cs
- ListViewContainer.cs
- NotCondition.cs
- TextParagraphView.cs
- WebContext.cs
- ErrorProvider.cs
- EventLogReader.cs
- ExpressionPrefixAttribute.cs
- NetworkInformationException.cs
- DataGridViewColumnEventArgs.cs
- ModulesEntry.cs
- PersonalizablePropertyEntry.cs
- SystemException.cs
- ClaimComparer.cs
- MessageQueueException.cs
- ServiceContractViewControl.Designer.cs
- RegionInfo.cs
- SqlTrackingQuery.cs
- EmbeddedMailObjectsCollection.cs
- sqlcontext.cs
- AvtEvent.cs
- ModuleConfigurationInfo.cs
- RegexCharClass.cs
- Matrix.cs
- lengthconverter.cs
- Metadata.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- DockPanel.cs
- WindowClosedEventArgs.cs
- ResourceContainer.cs
- ConditionValidator.cs
- GestureRecognizer.cs
- ScaleTransform.cs
- GridViewDesigner.cs
- Funcletizer.cs
- ToolStripSplitStackLayout.cs
- SupportingTokenSecurityTokenResolver.cs
- SafePEFileHandle.cs