Code:
/ 4.0 / 4.0 / 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. // ==++== // // 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
- XmlDocument.cs
- NotSupportedException.cs
- ZipIOExtraFieldElement.cs
- FormsAuthenticationTicket.cs
- Link.cs
- TableRowCollection.cs
- Parser.cs
- WebPartHeaderCloseVerb.cs
- CodeDOMUtility.cs
- SafeSystemMetrics.cs
- SoapSchemaExporter.cs
- SecUtil.cs
- Trace.cs
- DefaultValueTypeConverter.cs
- DbMetaDataColumnNames.cs
- AppDomainUnloadedException.cs
- ValidatingPropertiesEventArgs.cs
- CounterSampleCalculator.cs
- ProfileModule.cs
- SystemWebCachingSectionGroup.cs
- Stack.cs
- StorageScalarPropertyMapping.cs
- WindowsFormsSectionHandler.cs
- EventBindingService.cs
- GraphicsContainer.cs
- CloudCollection.cs
- ToolStripGripRenderEventArgs.cs
- AuthenticationConfig.cs
- HandleScope.cs
- ComplexTypeEmitter.cs
- FreezableDefaultValueFactory.cs
- Token.cs
- OptimizerPatterns.cs
- TdsParserSessionPool.cs
- Roles.cs
- TextReader.cs
- lengthconverter.cs
- HintTextConverter.cs
- DataGridLinkButton.cs
- Single.cs
- TickBar.cs
- TypedLocationWrapper.cs
- PresentationAppDomainManager.cs
- ProvidePropertyAttribute.cs
- JavaScriptSerializer.cs
- HtmlFormWrapper.cs
- BlockUIContainer.cs
- PageCatalogPart.cs
- IsolatedStorageFile.cs
- xmlsaver.cs
- wmiprovider.cs
- FtpWebResponse.cs
- XPathNodeInfoAtom.cs
- X509WindowsSecurityToken.cs
- EraserBehavior.cs
- ActivityBuilderHelper.cs
- PngBitmapDecoder.cs
- UnmanagedMemoryStreamWrapper.cs
- EntityDataSourceEntityTypeFilterItem.cs
- CanonicalFormWriter.cs
- Point3DAnimation.cs
- MappingItemCollection.cs
- Rect3DConverter.cs
- InstanceDescriptor.cs
- ScrollChangedEventArgs.cs
- Propagator.JoinPropagator.cs
- ButtonChrome.cs
- SerialReceived.cs
- DataControlExtensions.cs
- FromRequest.cs
- Compiler.cs
- FrameworkElement.cs
- Bind.cs
- DataGridViewSelectedRowCollection.cs
- MsmqIntegrationProcessProtocolHandler.cs
- UrlMapping.cs
- XmlSchemaValidator.cs
- MessageBodyMemberAttribute.cs
- EventListener.cs
- IEnumerable.cs
- LocalFileSettingsProvider.cs
- WindowsListViewScroll.cs
- AppDomainCompilerProxy.cs
- XpsException.cs
- hebrewshape.cs
- TableLayoutStyle.cs
- EmissiveMaterial.cs
- BaseProcessor.cs
- VectorAnimationBase.cs
- ArrayEditor.cs
- PermissionListSet.cs
- ValuePattern.cs
- RuleSettingsCollection.cs
- arabicshape.cs
- BufferBuilder.cs
- DesignRelationCollection.cs
- PtsCache.cs
- GeometryHitTestResult.cs
- XamlHttpHandlerFactory.cs
- TransactionScope.cs