Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / Scheduling / CancellationState.cs / 1305376 / CancellationState.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // CancellationState.cs // //[....] // // A bag of cancellation-related items that are passed around as a group. // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System; using System.Collections.Generic; using System.Threading; namespace System.Linq.Parallel { internal class CancellationState { // a cancellation signal that can be set internally to prompt early query termination. internal CancellationTokenSource InternalCancellationTokenSource; // the external cancellationToken that the user sets to ask for the query to terminate early. // this has to be tracked explicitly so that an OCE(externalToken) can be thrown as the query // execution unravels. internal CancellationToken ExternalCancellationToken; // A combined token Source for internal/external cancellation, defining the total cancellation state. internal CancellationTokenSource MergedCancellationTokenSource; // A combined token for internal/external cancellation, defining the total cancellation state. internal CancellationToken MergedCancellationToken { get { if( MergedCancellationTokenSource != null) return MergedCancellationTokenSource.Token; else return new CancellationToken(false); } } // A shared boolean flag to track whether a query-opening-enumerator dispose has occured. internal SharedTopLevelDisposedFlag; internal CancellationState(CancellationToken externalCancellationToken) { ExternalCancellationToken = externalCancellationToken; TopLevelDisposedFlag = new Shared (false); //it would always be initialised to false, so no harm doing it here and avoid #if around constructors. } /// /// Poll frequency (number of loops per cancellation check) for situations where per-1-loop testing is too high an overhead. /// internal const int POLL_INTERVAL = 63; //must be of the form (2^n)-1. // The two main situations requiring POLL_INTERVAL are: // 1. inner loops of sorting/merging operations // 2. tight loops that perform very little work per MoveNext call. // Testing has shown both situations have similar requirements and can share the same constant for polling interval. // // Because the poll checks are per-N loops, if there are delays in user code, they may affect cancellation timeliness. // Guidance is that all user-delegates should perform cancellation checks at least every 1ms. // // Inner loop code should poll once per n loop, typically via: // if ((i++ & CancellationState.POLL_INTERVAL) == 0) // CancellationState.ThrowIfCanceled(m_cancellationToken); // (Note, this only behaves as expected if FREQ is of the form (2^n)-1 ////// Throws an OCE if the merged token has been canceled. /// /// A token to check for cancelation. internal static void ThrowIfCanceled(CancellationToken token) { if (token.IsCancellationRequested) throw new OperationCanceledException(token); } // Test if external cancellation was requested and occured, and if so throw a standardize OCE with standardized message internal static void ThrowWithStandardMessageIfCanceled(CancellationToken externalCancellationToken) { if (externalCancellationToken.IsCancellationRequested) { string oceMessage = SR.GetString(SR.PLINQ_ExternalCancellationRequested); throw new OperationCanceledException(oceMessage, externalCancellationToken); } } } } // 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
- CharacterMetricsDictionary.cs
- InlineUIContainer.cs
- VisualBasicImportReference.cs
- CompilerParameters.cs
- WebResourceAttribute.cs
- HuffModule.cs
- Debug.cs
- BamlLocalizer.cs
- ProfileServiceManager.cs
- HtmlControlPersistable.cs
- RotateTransform3D.cs
- BaseTreeIterator.cs
- And.cs
- WindowsPrincipal.cs
- NavigationWindowAutomationPeer.cs
- RevocationPoint.cs
- Package.cs
- AutomationAttributeInfo.cs
- BrushMappingModeValidation.cs
- ServiceOperationDetailViewControl.cs
- UrlAuthFailureHandler.cs
- SingleAnimation.cs
- AmbiguousMatchException.cs
- ChangePassword.cs
- StreamInfo.cs
- Ray3DHitTestResult.cs
- CapabilitiesUse.cs
- XmlMapping.cs
- EditableRegion.cs
- SpecialFolderEnumConverter.cs
- DateTimeConverter.cs
- IgnoreSection.cs
- PageCatalogPart.cs
- DataColumnSelectionConverter.cs
- SoundPlayerAction.cs
- GlobalizationSection.cs
- EntityDataSourceDesignerHelper.cs
- AtlasWeb.Designer.cs
- Vector3DAnimation.cs
- GroupQuery.cs
- SrgsItemList.cs
- KoreanCalendar.cs
- WebPartCatalogAddVerb.cs
- UIElementParagraph.cs
- EventLogger.cs
- EntitySetBaseCollection.cs
- ChangeBlockUndoRecord.cs
- ToolStripPanelRenderEventArgs.cs
- SqlFileStream.cs
- TextEditorThreadLocalStore.cs
- CodeAssignStatement.cs
- FontFamily.cs
- TextParaLineResult.cs
- CustomExpression.cs
- DatagridviewDisplayedBandsData.cs
- DataGridToolTip.cs
- RootProfilePropertySettingsCollection.cs
- QueryStringParameter.cs
- ClientBuildManagerCallback.cs
- ErrorWebPart.cs
- RayMeshGeometry3DHitTestResult.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- TopClause.cs
- PropertyBuilder.cs
- CaseKeyBox.xaml.cs
- CommandManager.cs
- WrappedKeySecurityToken.cs
- SystemIPv6InterfaceProperties.cs
- CodeValidator.cs
- PropertyTab.cs
- ProtocolProfile.cs
- WinInet.cs
- ThicknessKeyFrameCollection.cs
- ClientTarget.cs
- InitializationEventAttribute.cs
- storagemappingitemcollection.viewdictionary.cs
- TextSelectionHelper.cs
- WebPartDescriptionCollection.cs
- MessagePropertyFilter.cs
- MSG.cs
- ResXFileRef.cs
- _SslState.cs
- WebServiceTypeData.cs
- ResourceExpressionBuilder.cs
- Journal.cs
- IntegrationExceptionEventArgs.cs
- CategoryAttribute.cs
- QilDataSource.cs
- StylusPointDescription.cs
- NativeMethods.cs
- WebPart.cs
- NameObjectCollectionBase.cs
- AspProxy.cs
- HostExecutionContextManager.cs
- StrokeNode.cs
- GeneralTransform3D.cs
- AnnotationResourceChangedEventArgs.cs
- StickyNoteHelper.cs
- DataGridViewRowsAddedEventArgs.cs
- DispatchChannelSink.cs