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
- XMLUtil.cs
- WorkflowValidationFailedException.cs
- MenuItem.cs
- OperationExecutionFault.cs
- TemplateContentLoader.cs
- followingsibling.cs
- MiniCustomAttributeInfo.cs
- LinqDataSourceInsertEventArgs.cs
- ComAdminInterfaces.cs
- Calendar.cs
- SoapException.cs
- EdmEntityTypeAttribute.cs
- SizeFConverter.cs
- UpdateTranslator.cs
- RNGCryptoServiceProvider.cs
- FormattedTextSymbols.cs
- DbProviderServices.cs
- SchemaElementDecl.cs
- wgx_render.cs
- SafeNativeMethods.cs
- SecurityProtocol.cs
- StringAnimationUsingKeyFrames.cs
- Vars.cs
- DocumentPaginator.cs
- BackgroundFormatInfo.cs
- HostExecutionContextManager.cs
- SystemIPAddressInformation.cs
- SchemaCollectionPreprocessor.cs
- SystemWebExtensionsSectionGroup.cs
- SimplePropertyEntry.cs
- StickyNote.cs
- Matrix.cs
- TreeNodeCollectionEditor.cs
- AsymmetricAlgorithm.cs
- CodeCompiler.cs
- ExpandSegment.cs
- WindowsListBox.cs
- TextEditorTables.cs
- SyndicationElementExtensionCollection.cs
- SendKeys.cs
- WebPartEditorCancelVerb.cs
- ValidationErrorEventArgs.cs
- DebugView.cs
- Point3D.cs
- Regex.cs
- HwndPanningFeedback.cs
- ImmComposition.cs
- TimeSpanMinutesConverter.cs
- WaitingCursor.cs
- PathGeometry.cs
- ColorComboBox.cs
- SqlCharStream.cs
- EmissiveMaterial.cs
- PropertyMap.cs
- AttributeCallbackBuilder.cs
- DataBoundControlParameterTarget.cs
- XmlSchemaObjectTable.cs
- DesignSurfaceServiceContainer.cs
- BamlResourceSerializer.cs
- SrgsRule.cs
- FormView.cs
- ReadOnlyDataSource.cs
- ElementHostPropertyMap.cs
- CategoryValueConverter.cs
- TableParaClient.cs
- CreateUserWizardStep.cs
- SafeThemeHandle.cs
- InstanceHandleConflictException.cs
- TextPatternIdentifiers.cs
- _SSPIWrapper.cs
- SqlUnionizer.cs
- ToolStripControlHost.cs
- SecureStringHasher.cs
- HatchBrush.cs
- AsyncCompletedEventArgs.cs
- Rotation3DKeyFrameCollection.cs
- OperationCanceledException.cs
- SimpleWebHandlerParser.cs
- DesignTableCollection.cs
- FilterEventArgs.cs
- EventProviderTraceListener.cs
- XmlTextReaderImplHelpers.cs
- PropertyEmitterBase.cs
- XPathQilFactory.cs
- Calendar.cs
- ActiveDesignSurfaceEvent.cs
- ResXBuildProvider.cs
- InputScopeManager.cs
- HttpCacheVary.cs
- ExpandableObjectConverter.cs
- DataGrid.cs
- RemoveStoryboard.cs
- SmiXetterAccessMap.cs
- Floater.cs
- WebControlsSection.cs
- DataTemplateSelector.cs
- Renderer.cs
- ListInitExpression.cs
- UnmanagedMemoryStreamWrapper.cs
- OpCopier.cs