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
- DesignerAutoFormatStyle.cs
- PeerName.cs
- OptimizedTemplateContent.cs
- ComponentEvent.cs
- EventLogLink.cs
- ExceptionValidationRule.cs
- ListBoxDesigner.cs
- ThreadStateException.cs
- ScriptBehaviorDescriptor.cs
- FieldNameLookup.cs
- ColumnMapVisitor.cs
- BindingRestrictions.cs
- TakeQueryOptionExpression.cs
- SmiXetterAccessMap.cs
- ButtonStandardAdapter.cs
- EventDescriptor.cs
- WizardPanelChangingEventArgs.cs
- ObservableCollection.cs
- DataGridViewCellPaintingEventArgs.cs
- NamespaceMapping.cs
- DaylightTime.cs
- DownloadProgressEventArgs.cs
- InlineObject.cs
- MtomMessageEncoder.cs
- EndEvent.cs
- XmlSchemaException.cs
- ProviderCommandInfoUtils.cs
- TCPClient.cs
- DoubleLinkListEnumerator.cs
- WsatServiceAddress.cs
- TextFormatterContext.cs
- MasterPageBuildProvider.cs
- PersonalizationDictionary.cs
- GenericPrincipal.cs
- Overlapped.cs
- MetadataHelper.cs
- Visual.cs
- UnsafeNativeMethods.cs
- HtmlImage.cs
- PointCollectionValueSerializer.cs
- lengthconverter.cs
- CookielessHelper.cs
- QilExpression.cs
- DynamicILGenerator.cs
- MexServiceChannelBuilder.cs
- HttpBrowserCapabilitiesBase.cs
- WaitHandle.cs
- ViewEventArgs.cs
- ChannelTraceRecord.cs
- NavigationCommands.cs
- AmbientLight.cs
- SettingsPropertyValueCollection.cs
- MarkupWriter.cs
- XamlPathDataSerializer.cs
- Repeater.cs
- XmlReflectionMember.cs
- MissingSatelliteAssemblyException.cs
- Vector3DConverter.cs
- ImageMapEventArgs.cs
- XmlLanguage.cs
- ByValueEqualityComparer.cs
- ListControl.cs
- XmlExtensionFunction.cs
- TableRowsCollectionEditor.cs
- SymmetricKey.cs
- StringWriter.cs
- DataGridViewCellStyleEditor.cs
- DelimitedListTraceListener.cs
- ApplicationDirectory.cs
- DriveNotFoundException.cs
- DesignerSerializerAttribute.cs
- WindowsTitleBar.cs
- DatePickerDateValidationErrorEventArgs.cs
- RuntimeHelpers.cs
- Color.cs
- EnumCodeDomSerializer.cs
- SecurityTokenTypes.cs
- MergeFilterQuery.cs
- WizardStepBase.cs
- Localizer.cs
- VersionUtil.cs
- DateTimeSerializationSection.cs
- MenuCommand.cs
- ObjectDataSourceEventArgs.cs
- InternalCache.cs
- _LocalDataStore.cs
- HtmlToClrEventProxy.cs
- ObjectReaderCompiler.cs
- ObfuscateAssemblyAttribute.cs
- RadioButtonList.cs
- ServiceBehaviorAttribute.cs
- PropertyItemInternal.cs
- DataBoundLiteralControl.cs
- MenuItemStyle.cs
- RSAPKCS1SignatureDeformatter.cs
- TypeConverterHelper.cs
- PassportPrincipal.cs
- EventSourceCreationData.cs
- CultureMapper.cs
- SqlXml.cs