Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / Scheduling / SpoolingTaskBase.cs / 1305376 / SpoolingTaskBase.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // SpoolingTaskBase.cs // //[....] // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.Collections.Generic; using System.Threading; using System.Diagnostics.Contracts; namespace System.Linq.Parallel { ////// A spooling task handles marshaling data from a producer to a consumer. It simply /// takes data from a producer and hands it off to a consumer. This class is the base /// class from which other concrete spooling tasks derive, encapsulating some common /// logic (such as capturing exceptions). /// internal abstract class SpoolingTaskBase : QueryTask { //------------------------------------------------------------------------------------ // Constructs a new spooling task. // // Arguments: // taskIndex - the unique index of this task // protected SpoolingTaskBase(int taskIndex, QueryTaskGroupState groupState) : base(taskIndex, groupState) { } //----------------------------------------------------------------------------------- // The implementation of the Work API just enumerates the producer's data, and // enqueues it into the consumer channel. Well, really, it just defers to extension // points (below) implemented by subclasses to do these things. // protected override void Work() { try { // Defer to the base class for the actual work. SpoolingWork(); } catch (Exception ex) { OperationCanceledException oce = ex as OperationCanceledException; if (oce != null && oce.CancellationToken == m_groupState.CancellationState.MergedCancellationToken && m_groupState.CancellationState.MergedCancellationToken.IsCancellationRequested) { //an expected internal cancellation has occurred. suppress this exception. } else { // TPL will catch and store the exception on the task object. We'll then later // turn around and wait on it, having the effect of propagating it. In the meantime, // we want to cooperative cancel all workers. m_groupState.CancellationState.InternalCancellationTokenSource.Cancel(); // And then repropagate to let TPL catch it. throw; } } finally { SpoolingFinally(); //dispose resources etc. } } //----------------------------------------------------------------------------------- // This method is responsible for enumerating results and enqueueing them to // the output channel(s) as appropriate. Each base class implements its own. // protected abstract void SpoolingWork(); //----------------------------------------------------------------------------------- // If the subclass needs to do something in the finally block of the main work loop, // it should override this and do it. Purely optional. // protected virtual void SpoolingFinally() { // (Intentionally left blank.) } } } // 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
- CompilationUtil.cs
- DataReceivedEventArgs.cs
- BamlLocalizationDictionary.cs
- SafeNativeMethodsOther.cs
- ClientConfigurationSystem.cs
- WebResourceUtil.cs
- ObjectQuery_EntitySqlExtensions.cs
- FreezableCollection.cs
- UIElementIsland.cs
- Encoder.cs
- SurrogateEncoder.cs
- UnsafeNativeMethods.cs
- _ProxyChain.cs
- ApplicationManager.cs
- DataSourceXmlAttributeAttribute.cs
- MsmqIntegrationMessagePool.cs
- StringExpressionSet.cs
- ProcessProtocolHandler.cs
- WrapperSecurityCommunicationObject.cs
- SvcMapFileLoader.cs
- XmlSchemaAny.cs
- HttpListenerRequestUriBuilder.cs
- TitleStyle.cs
- ProfilePropertyNameValidator.cs
- XmlSchemaNotation.cs
- BamlStream.cs
- DefaultExpressionVisitor.cs
- ManagedFilter.cs
- ProgressPage.cs
- TextShapeableCharacters.cs
- LogReserveAndAppendState.cs
- MultiByteCodec.cs
- FrameSecurityDescriptor.cs
- NamespaceMapping.cs
- NullableLongAverageAggregationOperator.cs
- DateTimeConverter.cs
- ConfigUtil.cs
- BlobPersonalizationState.cs
- SqlCachedBuffer.cs
- LinqToSqlWrapper.cs
- CommandPlan.cs
- WebHostScriptMappingsInstallComponent.cs
- LookupBindingPropertiesAttribute.cs
- BridgeDataRecord.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- RulePatternOps.cs
- TypeReference.cs
- Button.cs
- PersonalizationProviderHelper.cs
- PingReply.cs
- SnapshotChangeTrackingStrategy.cs
- DataControlFieldCell.cs
- RoleManagerEventArgs.cs
- WeakEventManager.cs
- StorageMappingItemLoader.cs
- ParseHttpDate.cs
- XmlValidatingReaderImpl.cs
- ThrowHelper.cs
- BooleanSwitch.cs
- InternalSafeNativeMethods.cs
- IEnumerable.cs
- QueuedDeliveryRequirementsMode.cs
- XmlCountingReader.cs
- CodeIterationStatement.cs
- StylusPointProperties.cs
- CompilerCollection.cs
- Function.cs
- IPGlobalProperties.cs
- BasicExpandProvider.cs
- AutomationProperties.cs
- ellipse.cs
- ImageInfo.cs
- ProgressBar.cs
- OutputScopeManager.cs
- ProviderCollection.cs
- GPStream.cs
- odbcmetadatacolumnnames.cs
- AllMembershipCondition.cs
- IProvider.cs
- EntityCollection.cs
- EdmType.cs
- QueryCursorEventArgs.cs
- XPathExpr.cs
- WebPartEditVerb.cs
- MergePropertyDescriptor.cs
- DynamicActivityTypeDescriptor.cs
- TypeFieldSchema.cs
- KnownBoxes.cs
- CodeDesigner.cs
- DateTimeFormatInfo.cs
- StylusShape.cs
- HMACMD5.cs
- DesignBindingConverter.cs
- HttpWriter.cs
- ClockController.cs
- Mappings.cs
- EnumDataContract.cs
- Calendar.cs
- MatrixKeyFrameCollection.cs
- returneventsaver.cs