Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / ndp / fx / src / xsp / System / Web / Util / WorkItem.cs / 1 / WorkItem.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { using System.Runtime.InteropServices; using System.Security.Permissions; using System.Threading; // // Support for positing of work items to a different thread // ////// public delegate void WorkItemCallback(); ///[To be supplied.] ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class WorkItem { private static bool _useQueueUserWorkItem = true; private static WaitCallback _onQueueUserWorkItemCompletion = new WaitCallback(OnQueueUserWorkItemCompletion); ///[To be supplied.] ////// [SecurityPermission(SecurityAction.Demand, Unrestricted=true)] public static void Post(WorkItemCallback callback) { #if !FEATURE_PAL // ROTORTODO if (Environment.OSVersion.Platform != PlatformID.Win32NT) throw new PlatformNotSupportedException(SR.GetString(SR.RequiresNT)); #else // !FEATURE_PAL throw new NotImplementedException("ROTORTODO"); #endif // !FEATURE_PAL PostInternal(callback); } // assertt to disregard the user code up the compressed stack [PermissionSet(SecurityAction.Assert, Unrestricted=true)] private static void CallCallbackWithAssert(WorkItemCallback callback) { callback(); } private static void OnQueueUserWorkItemCompletion(Object state) { WorkItemCallback callback = state as WorkItemCallback; if (callback != null) { CallCallbackWithAssert(callback); } } internal static void PostInternal(WorkItemCallback callback) { if (_useQueueUserWorkItem) { ThreadPool.QueueUserWorkItem(_onQueueUserWorkItemCompletion, callback); } else { WrappedWorkItemCallback w = new WrappedWorkItemCallback(callback); w.Post(); } } } internal class WrappedWorkItemCallback { private GCHandle _rootedThis; private WorkItemCallback _originalCallback; private WorkItemCallback _wrapperCallback; internal WrappedWorkItemCallback(WorkItemCallback callback) { _originalCallback = callback; _wrapperCallback = new WorkItemCallback(this.OnCallback); } internal void Post() { _rootedThis = GCHandle.Alloc(this); if (UnsafeNativeMethods.PostThreadPoolWorkItem(_wrapperCallback) != 1) { _rootedThis.Free(); throw new HttpException(SR.GetString(SR.Cannot_post_workitem)); } } private void OnCallback() { _rootedThis.Free(); _originalCallback(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { using System.Runtime.InteropServices; using System.Security.Permissions; using System.Threading; // // Support for positing of work items to a different thread // ////// public delegate void WorkItemCallback(); ///[To be supplied.] ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class WorkItem { private static bool _useQueueUserWorkItem = true; private static WaitCallback _onQueueUserWorkItemCompletion = new WaitCallback(OnQueueUserWorkItemCompletion); ///[To be supplied.] ////// [SecurityPermission(SecurityAction.Demand, Unrestricted=true)] public static void Post(WorkItemCallback callback) { #if !FEATURE_PAL // ROTORTODO if (Environment.OSVersion.Platform != PlatformID.Win32NT) throw new PlatformNotSupportedException(SR.GetString(SR.RequiresNT)); #else // !FEATURE_PAL throw new NotImplementedException("ROTORTODO"); #endif // !FEATURE_PAL PostInternal(callback); } // assertt to disregard the user code up the compressed stack [PermissionSet(SecurityAction.Assert, Unrestricted=true)] private static void CallCallbackWithAssert(WorkItemCallback callback) { callback(); } private static void OnQueueUserWorkItemCompletion(Object state) { WorkItemCallback callback = state as WorkItemCallback; if (callback != null) { CallCallbackWithAssert(callback); } } internal static void PostInternal(WorkItemCallback callback) { if (_useQueueUserWorkItem) { ThreadPool.QueueUserWorkItem(_onQueueUserWorkItemCompletion, callback); } else { WrappedWorkItemCallback w = new WrappedWorkItemCallback(callback); w.Post(); } } } internal class WrappedWorkItemCallback { private GCHandle _rootedThis; private WorkItemCallback _originalCallback; private WorkItemCallback _wrapperCallback; internal WrappedWorkItemCallback(WorkItemCallback callback) { _originalCallback = callback; _wrapperCallback = new WorkItemCallback(this.OnCallback); } internal void Post() { _rootedThis = GCHandle.Alloc(this); if (UnsafeNativeMethods.PostThreadPoolWorkItem(_wrapperCallback) != 1) { _rootedThis.Free(); throw new HttpException(SR.GetString(SR.Cannot_post_workitem)); } } private void OnCallback() { _rootedThis.Free(); _originalCallback(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.[To be supplied.] ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SessionStateSection.cs
- InfiniteTimeSpanConverter.cs
- Cell.cs
- FixedSOMGroup.cs
- GridView.cs
- TraceContextRecord.cs
- ApplyImportsAction.cs
- AtlasWeb.Designer.cs
- StringOutput.cs
- COM2TypeInfoProcessor.cs
- HwndSubclass.cs
- HttpResponse.cs
- RoutedEventValueSerializer.cs
- ApplicationId.cs
- CatalogPartCollection.cs
- DataGridItem.cs
- CodePageUtils.cs
- PageFunction.cs
- EntityDataSourceConfigureObjectContext.cs
- XsltFunctions.cs
- PackageRelationshipCollection.cs
- ReliableOutputSessionChannel.cs
- IntSecurity.cs
- NumericUpDownAccelerationCollection.cs
- SqlDataAdapter.cs
- SelectionGlyphBase.cs
- SerializationInfoEnumerator.cs
- TriggerActionCollection.cs
- TableRowCollection.cs
- DesignTimeValidationFeature.cs
- IxmlLineInfo.cs
- DataGridrowEditEndingEventArgs.cs
- DynamicRouteExpression.cs
- ObjectDataSourceDisposingEventArgs.cs
- ImageBrush.cs
- DoubleStorage.cs
- ListenerSessionConnectionReader.cs
- NativeRecognizer.cs
- Policy.cs
- BuilderPropertyEntry.cs
- VoiceInfo.cs
- UnknownWrapper.cs
- FtpRequestCacheValidator.cs
- _ScatterGatherBuffers.cs
- ResolveCriteriaApril2005.cs
- WebPartDescriptionCollection.cs
- WeakReadOnlyCollection.cs
- ReceiveCompletedEventArgs.cs
- MeasureItemEvent.cs
- SerializationInfoEnumerator.cs
- XmlNodeWriter.cs
- RuleSettings.cs
- AssemblySettingAttributes.cs
- ValuePatternIdentifiers.cs
- _NestedMultipleAsyncResult.cs
- DataGridViewComboBoxCell.cs
- ReadOnlyHierarchicalDataSource.cs
- ListViewInsertedEventArgs.cs
- PathFigure.cs
- UrlPropertyAttribute.cs
- NumericUpDownAccelerationCollection.cs
- SerialPort.cs
- XAMLParseException.cs
- InvalidPrinterException.cs
- DetailsViewRowCollection.cs
- HostUtils.cs
- HtmlUtf8RawTextWriter.cs
- UnsafeNativeMethods.cs
- OpenTypeLayoutCache.cs
- HelpExampleGenerator.cs
- DataGridView.cs
- WindowsStatic.cs
- ExpressionNode.cs
- autovalidator.cs
- ManualWorkflowSchedulerService.cs
- DataChangedEventManager.cs
- CfgParser.cs
- GridViewRowEventArgs.cs
- EntityViewGenerationAttribute.cs
- OracleTimeSpan.cs
- Trace.cs
- SerializationStore.cs
- MergeFailedEvent.cs
- RemoteWebConfigurationHost.cs
- DesignTimeParseData.cs
- PassportIdentity.cs
- HtmlHistory.cs
- LocationEnvironment.cs
- CodeTypeMember.cs
- ItemPager.cs
- HierarchicalDataSourceControl.cs
- ValueUtilsSmi.cs
- HttpCacheParams.cs
- SqlConnectionPoolGroupProviderInfo.cs
- WsdlInspector.cs
- EnumConverter.cs
- KeyGestureConverter.cs
- TextEditorSelection.cs
- WebSysDisplayNameAttribute.cs
- RawAppCommandInputReport.cs