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
- RowType.cs
- SoapIgnoreAttribute.cs
- ConsumerConnectionPointCollection.cs
- FloaterParaClient.cs
- Comparer.cs
- RC2CryptoServiceProvider.cs
- MatrixCamera.cs
- Cursors.cs
- BitmapInitialize.cs
- UnitySerializationHolder.cs
- ErrorWrapper.cs
- Menu.cs
- BitmapEffect.cs
- HierarchicalDataBoundControl.cs
- ScriptResourceMapping.cs
- DecimalConverter.cs
- IFormattable.cs
- XmlChildEnumerator.cs
- SafeNativeMethods.cs
- TextBox.cs
- CorrelationQuery.cs
- DataFormat.cs
- ReachPageContentSerializer.cs
- DataTrigger.cs
- SByteConverter.cs
- ObjectItemCollection.cs
- TagPrefixAttribute.cs
- XDeferredAxisSource.cs
- RtfControls.cs
- SqlDataRecord.cs
- BinaryObjectInfo.cs
- TableCell.cs
- CompositeActivityTypeDescriptorProvider.cs
- HttpInputStream.cs
- VirtualDirectoryMappingCollection.cs
- SqlBinder.cs
- RequestTimeoutManager.cs
- MergeEnumerator.cs
- GroupItem.cs
- MtomMessageEncodingBindingElement.cs
- WebSysDisplayNameAttribute.cs
- HttpPostClientProtocol.cs
- StreamReader.cs
- TypeReference.cs
- OpenTypeCommon.cs
- ParserStreamGeometryContext.cs
- PageThemeParser.cs
- UnsafeNativeMethods.cs
- Fonts.cs
- TrustManagerPromptUI.cs
- infer.cs
- DataGridToolTip.cs
- PeerApplication.cs
- AdCreatedEventArgs.cs
- MimeXmlImporter.cs
- FileEnumerator.cs
- TokenBasedSetEnumerator.cs
- SystemFonts.cs
- DataComponentGenerator.cs
- Panel.cs
- ChtmlSelectionListAdapter.cs
- TableItemStyle.cs
- webclient.cs
- QueryExpr.cs
- BinaryWriter.cs
- CompilerGlobalScopeAttribute.cs
- WebPartConnectionsCancelEventArgs.cs
- NetNamedPipeBinding.cs
- AccessDataSourceWizardForm.cs
- XsdDuration.cs
- PageParserFilter.cs
- WebBrowser.cs
- FormatterConverter.cs
- PublisherIdentityPermission.cs
- PrtCap_Public_Simple.cs
- ObjectMemberMapping.cs
- coordinator.cs
- DataConnectionHelper.cs
- Rotation3D.cs
- WorkflowTimerService.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- IpcChannelHelper.cs
- remotingproxy.cs
- Stack.cs
- WindowsSolidBrush.cs
- DataGridViewElement.cs
- ThemeableAttribute.cs
- EditingContext.cs
- WasEndpointConfigContainer.cs
- TimeSpanMinutesConverter.cs
- SystemBrushes.cs
- FontResourceCache.cs
- PatternMatcher.cs
- CustomCredentialPolicy.cs
- ImageSourceConverter.cs
- ComponentDispatcher.cs
- WebAdminConfigurationHelper.cs
- CodeBinaryOperatorExpression.cs
- MDIWindowDialog.cs
- HttpListenerException.cs