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
- PageParserFilter.cs
- CheckBox.cs
- DesignerActionTextItem.cs
- ScrollData.cs
- Environment.cs
- Permission.cs
- ScriptingScriptResourceHandlerSection.cs
- MonthCalendarDesigner.cs
- PeerNameResolver.cs
- HashHelper.cs
- DataStreams.cs
- XmlTextAttribute.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- RuleRefElement.cs
- SiteMembershipCondition.cs
- StructureChangedEventArgs.cs
- SortDescription.cs
- VariableQuery.cs
- Matrix.cs
- MenuItemStyleCollection.cs
- SafeWaitHandle.cs
- XmlSchemaAttributeGroupRef.cs
- PreProcessInputEventArgs.cs
- InstanceData.cs
- CodeEntryPointMethod.cs
- ProfileProvider.cs
- CollectionConverter.cs
- DBAsyncResult.cs
- BaseTemplateCodeDomTreeGenerator.cs
- TransformCollection.cs
- DropShadowBitmapEffect.cs
- BitmapPalettes.cs
- XmlMessageFormatter.cs
- WindowsTreeView.cs
- DesignerCommandAdapter.cs
- XmlText.cs
- XmlQueryType.cs
- HttpClientCredentialType.cs
- EditorZoneBase.cs
- Comparer.cs
- XmlDataLoader.cs
- Timer.cs
- CFStream.cs
- CatalogPartCollection.cs
- DiffuseMaterial.cs
- QilLiteral.cs
- HierarchicalDataTemplate.cs
- SafeRightsManagementQueryHandle.cs
- KeyTimeConverter.cs
- RoutedUICommand.cs
- GreenMethods.cs
- DataTableClearEvent.cs
- DesignerPerfEventProvider.cs
- Grid.cs
- CodeMethodInvokeExpression.cs
- RuntimeEnvironment.cs
- DataServiceResponse.cs
- StickyNoteHelper.cs
- WebPartZoneCollection.cs
- Viewport3DAutomationPeer.cs
- TreeBuilder.cs
- PropertyManager.cs
- SchemaNames.cs
- OpenTypeLayoutCache.cs
- DropShadowBitmapEffect.cs
- DrawToolTipEventArgs.cs
- CfgParser.cs
- TextParaLineResult.cs
- UpdatePanelTriggerCollection.cs
- HttpModule.cs
- ObfuscationAttribute.cs
- XmlDocument.cs
- EntitySqlQueryBuilder.cs
- VBCodeProvider.cs
- ZipIOExtraFieldPaddingElement.cs
- MethodRental.cs
- ItemContainerProviderWrapper.cs
- Speller.cs
- StateManagedCollection.cs
- XmlImplementation.cs
- PointConverter.cs
- _LazyAsyncResult.cs
- OleDbRowUpdatingEvent.cs
- DPCustomTypeDescriptor.cs
- LoadRetryAsyncResult.cs
- FileNotFoundException.cs
- OracleCommand.cs
- PauseStoryboard.cs
- RuntimeDelegateArgument.cs
- References.cs
- PropertyInformation.cs
- FormViewModeEventArgs.cs
- CommonXSendMessage.cs
- ContainerControl.cs
- WebMessageEncodingBindingElement.cs
- EntityFunctions.cs
- SqlDependency.cs
- _DisconnectOverlappedAsyncResult.cs
- CodeCommentStatementCollection.cs
- VectorAnimationUsingKeyFrames.cs