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
- DataStorage.cs
- MILUtilities.cs
- NamedPipeTransportSecurityElement.cs
- EventLog.cs
- TextShapeableCharacters.cs
- PlacementWorkspace.cs
- ObjectResult.cs
- XPathDocumentBuilder.cs
- PreservationFileReader.cs
- _ContextAwareResult.cs
- CodeGroup.cs
- AndCondition.cs
- CodeNamespaceCollection.cs
- WebBrowserHelper.cs
- FileIOPermission.cs
- CaseStatement.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- Script.cs
- ServiceModelPerformanceCounters.cs
- WindowsRebar.cs
- AuthorizationBehavior.cs
- UnicodeEncoding.cs
- WebBrowserContainer.cs
- SqlIdentifier.cs
- ProgressChangedEventArgs.cs
- WebPartExportVerb.cs
- GenericWebPart.cs
- CachedPathData.cs
- RawStylusInputCustomDataList.cs
- X509CertificateClaimSet.cs
- ColorMatrix.cs
- _UriSyntax.cs
- UnsafeNativeMethods.cs
- SecurityAppliedMessage.cs
- NotifyIcon.cs
- PixelFormatConverter.cs
- QilNode.cs
- CustomAttributeFormatException.cs
- RSAPKCS1SignatureDeformatter.cs
- EventLogPermissionEntryCollection.cs
- AspProxy.cs
- HttpPostedFile.cs
- ObjectDataSourceMethodEventArgs.cs
- EntityUtil.cs
- BamlBinaryReader.cs
- PageBreakRecord.cs
- RegexRunnerFactory.cs
- ValidatorCollection.cs
- ObjectPropertyMapping.cs
- DurableRuntimeValidator.cs
- DropShadowEffect.cs
- GZipObjectSerializer.cs
- SoapReflectionImporter.cs
- ConfigurationElement.cs
- ListItem.cs
- KeyInstance.cs
- SkipQueryOptionExpression.cs
- DescendantBaseQuery.cs
- XmlAnyElementAttributes.cs
- DesignerActionService.cs
- COM2ComponentEditor.cs
- TeredoHelper.cs
- VisualBrush.cs
- XmlQueryTypeFactory.cs
- FixedDocumentPaginator.cs
- GetPageCompletedEventArgs.cs
- oledbmetadatacolumnnames.cs
- DragCompletedEventArgs.cs
- XamlVector3DCollectionSerializer.cs
- EndpointConfigContainer.cs
- GridViewHeaderRowPresenter.cs
- PropertyPathWorker.cs
- EmptyImpersonationContext.cs
- WsatAdminException.cs
- CalendarDesigner.cs
- DiagnosticTraceSchemas.cs
- SoapSchemaMember.cs
- CheckedPointers.cs
- XsltContext.cs
- BufferModeSettings.cs
- RankException.cs
- ToolStripItemGlyph.cs
- StylusPointProperties.cs
- BuildProvider.cs
- EntityWithChangeTrackerStrategy.cs
- TranslateTransform3D.cs
- MergeFilterQuery.cs
- RecordsAffectedEventArgs.cs
- FontWeight.cs
- CodeCastExpression.cs
- WinFormsSecurity.cs
- LookupBindingPropertiesAttribute.cs
- AppSettingsSection.cs
- wmiprovider.cs
- MenuTracker.cs
- UnsignedPublishLicense.cs
- ContainsSearchOperator.cs
- IOThreadTimer.cs
- ValidationError.cs
- SQLByteStorage.cs