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
- BitStack.cs
- ScriptingJsonSerializationSection.cs
- DataGridViewTopRowAccessibleObject.cs
- AssemblyCache.cs
- ColorConvertedBitmap.cs
- EventlogProvider.cs
- DataGridViewCellCancelEventArgs.cs
- PathNode.cs
- ToolTip.cs
- GridViewRow.cs
- LayoutTableCell.cs
- CssStyleCollection.cs
- TableLayoutRowStyleCollection.cs
- EdgeModeValidation.cs
- DataSourceHelper.cs
- HyperLinkColumn.cs
- BufferedStream2.cs
- RangeValidator.cs
- ValidationResult.cs
- BrowserCapabilitiesCodeGenerator.cs
- CheckBoxRenderer.cs
- UrlMappingsModule.cs
- Label.cs
- EmptyStringExpandableObjectConverter.cs
- CfgRule.cs
- ApplicationServiceHelper.cs
- ProcessInfo.cs
- MultiAsyncResult.cs
- CodeSnippetCompileUnit.cs
- TextEditorContextMenu.cs
- Panel.cs
- DataGridViewEditingControlShowingEventArgs.cs
- ProcessHostServerConfig.cs
- DataObjectAttribute.cs
- COAUTHINFO.cs
- TypeSystem.cs
- FunctionDetailsReader.cs
- _ListenerAsyncResult.cs
- StylusTip.cs
- BreakSafeBase.cs
- MimeMapping.cs
- TextElementEnumerator.cs
- datacache.cs
- FlowDocumentScrollViewer.cs
- WeakRefEnumerator.cs
- GPRECT.cs
- DataGridViewRowConverter.cs
- _UriSyntax.cs
- Screen.cs
- ColumnPropertiesGroup.cs
- BuildResult.cs
- FontUnitConverter.cs
- LineBreak.cs
- Binding.cs
- Maps.cs
- XmlChildEnumerator.cs
- AbstractDataSvcMapFileLoader.cs
- XPathSelectionIterator.cs
- MediaEntryAttribute.cs
- AppSettingsReader.cs
- SymbolTable.cs
- LocalIdCollection.cs
- UnsettableComboBox.cs
- GlyphRunDrawing.cs
- Quad.cs
- PublisherIdentityPermission.cs
- TypeConstant.cs
- PropertyGridView.cs
- Parser.cs
- OracleTransaction.cs
- DataGridHeaderBorder.cs
- TextShapeableCharacters.cs
- ADConnectionHelper.cs
- XmlNullResolver.cs
- MenuItemCollection.cs
- EnvelopedPkcs7.cs
- InvalidDataException.cs
- WebUtil.cs
- PageOutputQuality.cs
- FlowLayoutPanel.cs
- OdbcTransaction.cs
- HtmlInputCheckBox.cs
- FormsAuthenticationTicket.cs
- SizeConverter.cs
- CompositeDataBoundControl.cs
- AtomPub10ServiceDocumentFormatter.cs
- WebPartsSection.cs
- Brushes.cs
- SemaphoreSecurity.cs
- DataContractSet.cs
- CultureTable.cs
- Baml2006ReaderContext.cs
- MediaSystem.cs
- StrongNameMembershipCondition.cs
- CursorConverter.cs
- CompilerScopeManager.cs
- XmlILModule.cs
- TargetConverter.cs
- EnumerableWrapperWeakToStrong.cs
- XmlSchemaExternal.cs