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
- ServiceDurableInstanceContextProvider.cs
- ImageAnimator.cs
- ValidationHelper.cs
- DeobfuscatingStream.cs
- DocumentCollection.cs
- XmlSchemaComplexType.cs
- CriticalHandle.cs
- HTTPNotFoundHandler.cs
- BaseDataBoundControl.cs
- TextRangeEditLists.cs
- TextComposition.cs
- DataSet.cs
- QilTypeChecker.cs
- SecurityKeyIdentifierClause.cs
- SupportsEventValidationAttribute.cs
- WindowsScrollBar.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- WorkflowApplicationEventArgs.cs
- ComponentResourceManager.cs
- EdmSchemaError.cs
- CodeExporter.cs
- WebPartConnectionsConfigureVerb.cs
- VariantWrapper.cs
- ContextMenuAutomationPeer.cs
- UnsafeNativeMethodsMilCoreApi.cs
- DynamicUpdateCommand.cs
- XamlSerializer.cs
- HttpCachePolicyElement.cs
- EventMappingSettingsCollection.cs
- GetPageCompletedEventArgs.cs
- PlanCompiler.cs
- D3DImage.cs
- SortDescription.cs
- DataGridTablesFactory.cs
- ConditionalAttribute.cs
- SqlClientFactory.cs
- SqlCachedBuffer.cs
- WsatConfiguration.cs
- CodeCompiler.cs
- QueryExtender.cs
- MailWebEventProvider.cs
- ThrowHelper.cs
- _ListenerAsyncResult.cs
- MailWebEventProvider.cs
- SmiEventSink_DeferedProcessing.cs
- RightsManagementEncryptionTransform.cs
- ListViewGroupConverter.cs
- ComponentEvent.cs
- Cursors.cs
- DataException.cs
- SmiEventSink_Default.cs
- DataGridTextBoxColumn.cs
- Tuple.cs
- SQLRoleProvider.cs
- ScrollBarRenderer.cs
- RouteValueDictionary.cs
- XmlReader.cs
- DataTableReader.cs
- SqlCacheDependencySection.cs
- Triangle.cs
- MinMaxParagraphWidth.cs
- StorageModelBuildProvider.cs
- BamlBinaryReader.cs
- safesecurityhelperavalon.cs
- _LocalDataStore.cs
- RecognizerStateChangedEventArgs.cs
- LockRecursionException.cs
- SqlAggregateChecker.cs
- Transform3DCollection.cs
- TextStore.cs
- XmlMapping.cs
- DocumentGrid.cs
- StructuralObject.cs
- XhtmlConformanceSection.cs
- InternalRelationshipCollection.cs
- TerminateWorkflow.cs
- LinkButton.cs
- CommandID.cs
- TreeIterator.cs
- LineServicesCallbacks.cs
- RoutedEventValueSerializer.cs
- DataGridViewCheckBoxColumn.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- VisualBasicValue.cs
- ToolboxBitmapAttribute.cs
- RegistrySecurity.cs
- ToolboxItemFilterAttribute.cs
- EntityContainerRelationshipSet.cs
- VolatileEnlistmentMultiplexing.cs
- CompensatableTransactionScopeActivity.cs
- InterleavedZipPartStream.cs
- BufferedGraphicsContext.cs
- TargetException.cs
- SmiTypedGetterSetter.cs
- ResourceSet.cs
- TextHidden.cs
- FormatterConverter.cs
- DictionaryChange.cs
- _PooledStream.cs
- BitHelper.cs