Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / Merging / MergeEnumerator.cs / 1305376 / MergeEnumerator.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
//
// MergeEnumerator.cs
//
// [....]
//
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
namespace System.Linq.Parallel
{
///
/// Convenience class used by enumerators that merge many partitions into one.
///
///
internal abstract class MergeEnumerator : IEnumerator
{
protected QueryTaskGroupState m_taskGroupState;
//------------------------------------------------------------------------------------
// Initializes a new enumerator with the specified group state.
//
protected MergeEnumerator(QueryTaskGroupState taskGroupState)
{
Contract.Assert(taskGroupState != null);
m_taskGroupState = taskGroupState;
}
//-----------------------------------------------------------------------------------
// Abstract members of IEnumerator that must be implemented by concrete subclasses.
//
public abstract TInputOutput Current { get; }
public abstract bool MoveNext();
//-----------------------------------------------------------------------------------
// Straightforward IEnumerator methods. So subclasses needn't bother.
//
object IEnumerator.Current
{
get { return ((IEnumerator)this).Current; }
}
public virtual void Reset()
{
// (intentionally left blank)
}
//-----------------------------------------------------------------------------------
// If the enumerator is disposed of before the query finishes, we need to ensure
// we properly tear down the query such that exceptions are not lost.
//
public virtual void Dispose()
{
// If the enumerator is being disposed of before the query has finished,
// we will wait for the query to finish. Cancellation should have already
// been initiated, so we just need to ensure exceptions are propagated.
if (!m_taskGroupState.IsAlreadyEnded)
{
Contract.Assert(m_taskGroupState.CancellationState.TopLevelDisposedFlag.Value);
m_taskGroupState.QueryEnd(true);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
//
// MergeEnumerator.cs
//
// [....]
//
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
namespace System.Linq.Parallel
{
///
/// Convenience class used by enumerators that merge many partitions into one.
///
///
internal abstract class MergeEnumerator : IEnumerator
{
protected QueryTaskGroupState m_taskGroupState;
//------------------------------------------------------------------------------------
// Initializes a new enumerator with the specified group state.
//
protected MergeEnumerator(QueryTaskGroupState taskGroupState)
{
Contract.Assert(taskGroupState != null);
m_taskGroupState = taskGroupState;
}
//-----------------------------------------------------------------------------------
// Abstract members of IEnumerator that must be implemented by concrete subclasses.
//
public abstract TInputOutput Current { get; }
public abstract bool MoveNext();
//-----------------------------------------------------------------------------------
// Straightforward IEnumerator methods. So subclasses needn't bother.
//
object IEnumerator.Current
{
get { return ((IEnumerator)this).Current; }
}
public virtual void Reset()
{
// (intentionally left blank)
}
//-----------------------------------------------------------------------------------
// If the enumerator is disposed of before the query finishes, we need to ensure
// we properly tear down the query such that exceptions are not lost.
//
public virtual void Dispose()
{
// If the enumerator is being disposed of before the query has finished,
// we will wait for the query to finish. Cancellation should have already
// been initiated, so we just need to ensure exceptions are propagated.
if (!m_taskGroupState.IsAlreadyEnded)
{
Contract.Assert(m_taskGroupState.CancellationState.TopLevelDisposedFlag.Value);
m_taskGroupState.QueryEnd(true);
}
}
}
}
// 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
- HttpCookiesSection.cs
- DrawListViewItemEventArgs.cs
- SerializableAttribute.cs
- FacetChecker.cs
- MarshalByValueComponent.cs
- unsafenativemethodstextservices.cs
- KerberosSecurityTokenProvider.cs
- BamlCollectionHolder.cs
- PtsPage.cs
- Attributes.cs
- NullableDecimalMinMaxAggregationOperator.cs
- RunClient.cs
- SqlGatherConsumedAliases.cs
- CollectionChangeEventArgs.cs
- DateTimeConverter2.cs
- PasswordBoxAutomationPeer.cs
- IPGlobalProperties.cs
- MailBnfHelper.cs
- KeyedQueue.cs
- WhitespaceRuleReader.cs
- XPathBuilder.cs
- CodeIdentifier.cs
- Trace.cs
- bindurihelper.cs
- ResourcesGenerator.cs
- LinqMaximalSubtreeNominator.cs
- iisPickupDirectory.cs
- NopReturnReader.cs
- SqlTransaction.cs
- DataGridViewRowsAddedEventArgs.cs
- UniformGrid.cs
- ChangeBlockUndoRecord.cs
- DataGridViewColumn.cs
- CodeTypeDeclarationCollection.cs
- RelationshipManager.cs
- XmlSerializationReader.cs
- Attribute.cs
- WebBrowser.cs
- BitmapCodecInfo.cs
- Point.cs
- WCFModelStrings.Designer.cs
- CompilerState.cs
- SoapSchemaImporter.cs
- DetailsViewDeletedEventArgs.cs
- JpegBitmapEncoder.cs
- SourceFileBuildProvider.cs
- SamlAuthenticationClaimResource.cs
- MembershipUser.cs
- Vector3DCollection.cs
- TransformValueSerializer.cs
- Invariant.cs
- ToolTipAutomationPeer.cs
- QuestionEventArgs.cs
- BitmapVisualManager.cs
- DragDrop.cs
- HMACSHA512.cs
- NonceCache.cs
- TransactionChannelFaultConverter.cs
- StyleCollectionEditor.cs
- BaseDataList.cs
- IndexerReference.cs
- XmlNamespaceMapping.cs
- Literal.cs
- RootBrowserWindowAutomationPeer.cs
- BamlCollectionHolder.cs
- WebPartMenuStyle.cs
- ImmutableObjectAttribute.cs
- TypeDescriptionProvider.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- LocationUpdates.cs
- SchemaObjectWriter.cs
- BaseValidator.cs
- DateTime.cs
- updatecommandorderer.cs
- ProcessHostFactoryHelper.cs
- OdbcConnectionHandle.cs
- SpotLight.cs
- Vector3DIndependentAnimationStorage.cs
- Rotation3DAnimationUsingKeyFrames.cs
- Image.cs
- CqlGenerator.cs
- FormatConvertedBitmap.cs
- SingleTagSectionHandler.cs
- DifferencingCollection.cs
- GACMembershipCondition.cs
- ResourceDefaultValueAttribute.cs
- GroupStyle.cs
- JapaneseCalendar.cs
- ArglessEventHandlerProxy.cs
- WasAdminWrapper.cs
- DesignerImageAdapter.cs
- DynamicPropertyReader.cs
- ContextMarshalException.cs
- WeakReferenceKey.cs
- ListParaClient.cs
- CodeNamespaceImport.cs
- GacUtil.cs
- RectValueSerializer.cs
- TextElementCollectionHelper.cs
- QilLiteral.cs