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
- TogglePatternIdentifiers.cs
- XmlHierarchyData.cs
- TransportBindingElementImporter.cs
- StreamResourceInfo.cs
- CharAnimationBase.cs
- SystemIcons.cs
- KeyMatchBuilder.cs
- DataRecordInternal.cs
- SessionStateItemCollection.cs
- SqlGenericUtil.cs
- PolygonHotSpot.cs
- HttpContext.cs
- TriggerAction.cs
- XmlnsDefinitionAttribute.cs
- ExpressionLexer.cs
- ZipIOLocalFileBlock.cs
- Brush.cs
- CircleHotSpot.cs
- MenuItemStyleCollection.cs
- HighContrastHelper.cs
- IndexOutOfRangeException.cs
- BitmapEffectOutputConnector.cs
- CallbackValidator.cs
- BitmapEffectOutputConnector.cs
- EntitySet.cs
- TemplateBindingExtensionConverter.cs
- StringFunctions.cs
- StatusStrip.cs
- Membership.cs
- XhtmlTextWriter.cs
- WSFederationHttpSecurity.cs
- DrawingBrush.cs
- TypeFieldSchema.cs
- ReadWriteObjectLock.cs
- FormViewCommandEventArgs.cs
- NameSpaceExtractor.cs
- MonthCalendar.cs
- ToolStripDropTargetManager.cs
- WindowsFormsEditorServiceHelper.cs
- ParseChildrenAsPropertiesAttribute.cs
- TimeSpanConverter.cs
- SynchronizationLockException.cs
- XamlTypeMapperSchemaContext.cs
- OrderingQueryOperator.cs
- externdll.cs
- ObjectToIdCache.cs
- Keyboard.cs
- PasswordTextNavigator.cs
- Tokenizer.cs
- MediaPlayer.cs
- FlatButtonAppearance.cs
- ControlCollection.cs
- XmlMapping.cs
- DesignerToolboxInfo.cs
- Stack.cs
- TextPenaltyModule.cs
- TextBoxAutomationPeer.cs
- ParentUndoUnit.cs
- Form.cs
- FileUpload.cs
- ScriptComponentDescriptor.cs
- Int32RectConverter.cs
- DependencyObjectType.cs
- OdbcParameter.cs
- StreamWriter.cs
- IProvider.cs
- RegistryConfigurationProvider.cs
- TraceRecord.cs
- ThemeDirectoryCompiler.cs
- MailMessage.cs
- Certificate.cs
- InputElement.cs
- RuntimeConfig.cs
- CharAnimationUsingKeyFrames.cs
- SecurityUtils.cs
- HtmlTextArea.cs
- DbDataRecord.cs
- DefaultMemberAttribute.cs
- SpecialFolderEnumConverter.cs
- Repeater.cs
- GCHandleCookieTable.cs
- CatalogPartDesigner.cs
- WorkflowInstanceAbortedRecord.cs
- StateManager.cs
- Point3DAnimationBase.cs
- RectangleF.cs
- AppearanceEditorPart.cs
- CompiledQuery.cs
- PathHelper.cs
- FileDialog.cs
- GlyphsSerializer.cs
- RestHandler.cs
- TypeSystem.cs
- QueryOperator.cs
- XmlAttribute.cs
- KeyManager.cs
- DataRecord.cs
- PrintDialogDesigner.cs
- ExceptionDetail.cs
- TabItemAutomationPeer.cs