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
- TreeIterator.cs
- FormsAuthenticationConfiguration.cs
- ProgressBarBrushConverter.cs
- WebConfigurationManager.cs
- CreateUserErrorEventArgs.cs
- SqlInternalConnectionTds.cs
- ClientScriptManagerWrapper.cs
- LambdaCompiler.Expressions.cs
- XmlLanguageConverter.cs
- ThreadExceptionEvent.cs
- XmlSchemaDatatype.cs
- BamlLocalizer.cs
- SystemThemeKey.cs
- AttachedAnnotation.cs
- TargetException.cs
- ContextQuery.cs
- CustomError.cs
- TrustLevel.cs
- AnnotationResourceCollection.cs
- odbcmetadatacolumnnames.cs
- SystemNetworkInterface.cs
- DoWhile.cs
- EasingQuaternionKeyFrame.cs
- LayoutSettings.cs
- DATA_BLOB.cs
- TypeInfo.cs
- PageWrapper.cs
- SoapHttpTransportImporter.cs
- HitTestParameters.cs
- ClrPerspective.cs
- HttpModuleAction.cs
- XmlDocumentFieldSchema.cs
- ActivityBuilderHelper.cs
- PlatformCulture.cs
- MultiAsyncResult.cs
- MasterPageBuildProvider.cs
- ContentTypeSettingClientMessageFormatter.cs
- LookupNode.cs
- TypeConverterHelper.cs
- PropertyInformation.cs
- AutomationIdentifierGuids.cs
- CodeMemberProperty.cs
- Substitution.cs
- TextModifier.cs
- XPathAncestorIterator.cs
- WebUtil.cs
- HtmlInputCheckBox.cs
- AccessDataSourceDesigner.cs
- Geometry3D.cs
- Graphics.cs
- ProviderException.cs
- SqlDataSource.cs
- PropertyChangingEventArgs.cs
- SimpleType.cs
- PointAnimation.cs
- ThreadStaticAttribute.cs
- VectorCollection.cs
- EventHandlers.cs
- TextBoxView.cs
- HttpListenerTimeoutManager.cs
- GeneralEndpointIdentity.cs
- CodeParameterDeclarationExpressionCollection.cs
- DBSchemaTable.cs
- NameValueConfigurationElement.cs
- NegationPusher.cs
- SoapObjectReader.cs
- WebPartConnectionsCancelVerb.cs
- ReadOnlyPropertyMetadata.cs
- TerminatorSinks.cs
- XmlDataCollection.cs
- XmlAttributes.cs
- EntityObject.cs
- QilChoice.cs
- SqlMultiplexer.cs
- ComponentResourceManager.cs
- Error.cs
- SQLDateTime.cs
- DrawingImage.cs
- Assembly.cs
- ToolStripSettings.cs
- RowUpdatingEventArgs.cs
- WebBrowser.cs
- DateTimeFormatInfo.cs
- Preprocessor.cs
- DetailsViewPagerRow.cs
- SiteMap.cs
- SQLInt32.cs
- HashSetDebugView.cs
- SendSecurityHeader.cs
- WeakReference.cs
- safex509handles.cs
- SystemDiagnosticsSection.cs
- BindingGraph.cs
- Int32Animation.cs
- ManualWorkflowSchedulerService.cs
- MemberInfoSerializationHolder.cs
- ProcessHostMapPath.cs
- AccessText.cs
- SqlUdtInfo.cs
- SRDisplayNameAttribute.cs