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
- BrowserCapabilitiesCompiler.cs
- ListBindingHelper.cs
- MenuItemStyleCollection.cs
- CookielessHelper.cs
- BindingValueChangedEventArgs.cs
- CustomAttribute.cs
- FixedDocumentPaginator.cs
- ExpressionsCollectionEditor.cs
- MulticastOption.cs
- Application.cs
- AlphabeticalEnumConverter.cs
- SocketElement.cs
- MailSettingsSection.cs
- GenericsNotImplementedException.cs
- MarginsConverter.cs
- ContextBase.cs
- DrawingCollection.cs
- PlatformNotSupportedException.cs
- WebPartChrome.cs
- ClientConfigPaths.cs
- Journaling.cs
- Color.cs
- EventlogProvider.cs
- AssociationTypeEmitter.cs
- SoapExtensionTypeElement.cs
- Grant.cs
- SqlNodeTypeOperators.cs
- NativeObjectSecurity.cs
- SerializationEventsCache.cs
- DeclarativeCatalogPart.cs
- WeakReference.cs
- CodeCatchClause.cs
- TypeAccessException.cs
- RemoteWebConfigurationHostServer.cs
- datacache.cs
- SafeNativeMethodsCLR.cs
- Expression.cs
- COM2TypeInfoProcessor.cs
- SimpleApplicationHost.cs
- UidPropertyAttribute.cs
- QilTernary.cs
- TextRenderingModeValidation.cs
- ParseNumbers.cs
- ComponentCommands.cs
- SqlTriggerContext.cs
- FilterQuery.cs
- XmlSchemaAttributeGroupRef.cs
- ProviderMetadata.cs
- InvokeWebService.cs
- CapabilitiesState.cs
- DesignerDataRelationship.cs
- SafeNativeMethodsMilCoreApi.cs
- WSFederationHttpSecurityMode.cs
- XLinq.cs
- COM2PictureConverter.cs
- TypeResolvingOptionsAttribute.cs
- PersonalizationProviderCollection.cs
- ParallelActivityDesigner.cs
- Fonts.cs
- PersistenceException.cs
- DrawingCollection.cs
- SocketInformation.cs
- DataGridTable.cs
- SparseMemoryStream.cs
- TextBox.cs
- InputLanguageEventArgs.cs
- DispatcherTimer.cs
- FrameworkContextData.cs
- Calendar.cs
- SafeNativeMethodsOther.cs
- KernelTypeValidation.cs
- AdCreatedEventArgs.cs
- ClaimTypeElementCollection.cs
- LineGeometry.cs
- EventLogLink.cs
- DataService.cs
- IdleTimeoutMonitor.cs
- GridViewUpdateEventArgs.cs
- ComplexPropertyEntry.cs
- XmlArrayItemAttribute.cs
- CacheMemory.cs
- DesigntimeLicenseContext.cs
- PartBasedPackageProperties.cs
- TraceSource.cs
- DataSourceXmlTextReader.cs
- DataRowView.cs
- RowParagraph.cs
- BitmapSource.cs
- Html32TextWriter.cs
- CalendarDateChangedEventArgs.cs
- ServiceNotStartedException.cs
- RegexTypeEditor.cs
- DispatcherEventArgs.cs
- RealizationContext.cs
- UIElement.cs
- ZipFileInfoCollection.cs
- GeometryValueSerializer.cs
- JsonXmlDataContract.cs
- MainMenu.cs
- XmlSchemaSet.cs