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
- ResourceDefaultValueAttribute.cs
- CollectionBuilder.cs
- DiscoveryServiceExtension.cs
- AnimatedTypeHelpers.cs
- TextRangeSerialization.cs
- MessageDecoder.cs
- FillBehavior.cs
- MtomMessageEncodingElement.cs
- DEREncoding.cs
- WorkflowDebuggerSteppingAttribute.cs
- EraserBehavior.cs
- TextServicesCompartmentEventSink.cs
- Int64AnimationBase.cs
- counter.cs
- RewritingPass.cs
- XPathNodePointer.cs
- DataGridCellsPanel.cs
- EmbossBitmapEffect.cs
- Lazy.cs
- XmlSchemaRedefine.cs
- HitTestParameters.cs
- ResourceWriter.cs
- DataKey.cs
- DbConnectionInternal.cs
- RemotingConfiguration.cs
- WmlMobileTextWriter.cs
- DelegateBodyWriter.cs
- StackOverflowException.cs
- XmlSchemaException.cs
- _CacheStreams.cs
- EventEntry.cs
- TransactionFlowBindingElementImporter.cs
- CodeSubDirectory.cs
- Control.cs
- MediaCommands.cs
- LocalValueEnumerator.cs
- ObjectDataSourceEventArgs.cs
- TabletDeviceInfo.cs
- DbDataSourceEnumerator.cs
- XmlSchemaFacet.cs
- URLMembershipCondition.cs
- Listbox.cs
- TrayIconDesigner.cs
- DataSpaceManager.cs
- DummyDataSource.cs
- WhitespaceRuleReader.cs
- DirectoryNotFoundException.cs
- StringStorage.cs
- JsonGlobals.cs
- SendOperation.cs
- RegexTree.cs
- QualificationDataItem.cs
- PlaceHolder.cs
- TransactionProtocolConverter.cs
- XmlSchemaExternal.cs
- XmlDictionaryWriter.cs
- MessageDesigner.cs
- UICuesEvent.cs
- LexicalChunk.cs
- SqlConnectionFactory.cs
- RegexCharClass.cs
- _RequestCacheProtocol.cs
- FromRequest.cs
- StorageAssociationTypeMapping.cs
- FixedPageAutomationPeer.cs
- TextProperties.cs
- PtsHelper.cs
- FormsAuthenticationEventArgs.cs
- StringCollection.cs
- VariableAction.cs
- _AuthenticationState.cs
- CommonServiceBehaviorElement.cs
- CodeMethodInvokeExpression.cs
- Input.cs
- RightsManagementEncryptedStream.cs
- RoutedEventArgs.cs
- Object.cs
- XmlSchemaObject.cs
- Merger.cs
- RadioButtonFlatAdapter.cs
- BooleanAnimationBase.cs
- Math.cs
- RegexCapture.cs
- DiagnosticsConfigurationHandler.cs
- DropDownButton.cs
- CursorConverter.cs
- TextElementEditingBehaviorAttribute.cs
- WebPartDisplayModeCancelEventArgs.cs
- MessageQueueEnumerator.cs
- DateBoldEvent.cs
- RegexMatch.cs
- DataChangedEventManager.cs
- FormViewPagerRow.cs
- ContextMarshalException.cs
- Attributes.cs
- XhtmlBasicListAdapter.cs
- DataListAutoFormat.cs
- XmlAtomErrorReader.cs
- DataControlFieldHeaderCell.cs
- CodeDirectoryCompiler.cs