Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / CloseCollectionAsyncResult.cs / 1 / CloseCollectionAsyncResult.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel { using System.Collections.Generic; using System.Threading; class CloseCollectionAsyncResult : AsyncResult { bool completedSynchronously; Exception exception; static AsyncCallback nestedCallback = DiagnosticUtility.ThunkAsyncCallback(new AsyncCallback(Callback)); int count; public CloseCollectionAsyncResult(TimeSpan timeout, AsyncCallback otherCallback, object state, IListcollection) : base(otherCallback, state) { TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); completedSynchronously = true; count = collection.Count; if (count == 0) { Complete(true); return; } for (int index = 0; index < collection.Count; index++) { CallbackState callbackState = new CallbackState(this, collection[index]); IAsyncResult result; try { result = collection[index].BeginClose(timeoutHelper.RemainingTime(), nestedCallback, callbackState); } #pragma warning suppress 56500 // covered by FxCOP catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } Decrement(true, e); collection[index].Abort(); continue; } if (result.CompletedSynchronously) { CompleteClose(collection[index], result); } } } void CompleteClose(ICommunicationObject communicationObject, IAsyncResult result) { Exception closeException = null; try { communicationObject.EndClose(result); } #pragma warning suppress 56500 // covered by FxCOP catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } closeException = e; communicationObject.Abort(); } Decrement(result.CompletedSynchronously, closeException); } static void Callback(IAsyncResult result) { if (result.CompletedSynchronously) { return; } CallbackState callbackState = (CallbackState)result.AsyncState; callbackState.Result.CompleteClose(callbackState.Instance, result); } void Decrement(bool completedSynchronously) { if (completedSynchronously == false) this.completedSynchronously = false; if (Interlocked.Decrement(ref count) == 0) { if (this.exception != null) Complete(this.completedSynchronously, this.exception); else Complete(this.completedSynchronously); } } void Decrement(bool completedSynchronously, Exception exception) { this.exception = exception; this.Decrement(completedSynchronously); } public static void End(IAsyncResult result) { AsyncResult.End (result); } class CallbackState { ICommunicationObject instance; CloseCollectionAsyncResult result; public CallbackState(CloseCollectionAsyncResult result, ICommunicationObject instance) { this.result = result; this.instance = instance; } public ICommunicationObject Instance { get { return instance; } } public CloseCollectionAsyncResult Result { get { return result; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CodeConstructor.cs
- BuildProviderInstallComponent.cs
- ConfigsHelper.cs
- PathFigureCollection.cs
- WebPartMinimizeVerb.cs
- ReadOnlyDictionary.cs
- CodeSnippetTypeMember.cs
- ParameterCollection.cs
- XmlAnyElementAttributes.cs
- GlyphElement.cs
- MailHeaderInfo.cs
- Token.cs
- XmlSiteMapProvider.cs
- SystemPens.cs
- InvokeBinder.cs
- HtmlTernaryTree.cs
- ListViewContainer.cs
- EventProvider.cs
- KnownIds.cs
- LogRecordSequence.cs
- CompilationLock.cs
- StylusSystemGestureEventArgs.cs
- WorkflowQueueInfo.cs
- TextMetrics.cs
- DbMetaDataColumnNames.cs
- AdPostCacheSubstitution.cs
- MonthCalendarDesigner.cs
- CompilerGeneratedAttribute.cs
- ProviderConnectionPoint.cs
- CheckBoxRenderer.cs
- FontCacheUtil.cs
- InputLanguage.cs
- DataGridCaption.cs
- TrustManagerPromptUI.cs
- EditorZoneDesigner.cs
- XamlValidatingReader.cs
- DataGridViewEditingControlShowingEventArgs.cs
- CompilerError.cs
- BitmapCache.cs
- FlowDocumentView.cs
- XmlNamedNodeMap.cs
- Int64.cs
- FlowLayout.cs
- TableRow.cs
- __ComObject.cs
- HostUtils.cs
- BehaviorEditorPart.cs
- AsyncOperation.cs
- Environment.cs
- TraceFilter.cs
- Utils.cs
- ScheduleChanges.cs
- ContentPresenter.cs
- QueryCacheKey.cs
- DbSourceCommand.cs
- ApplicationGesture.cs
- OleStrCAMarshaler.cs
- SignedXml.cs
- Int16.cs
- MarkupProperty.cs
- MatrixIndependentAnimationStorage.cs
- SoapIncludeAttribute.cs
- ClientSettings.cs
- ContextMarshalException.cs
- DataContractJsonSerializer.cs
- VisualStyleElement.cs
- SvcFileManager.cs
- ParameterBuilder.cs
- DataServiceClientException.cs
- SignatureResourcePool.cs
- TransformGroup.cs
- BuildResult.cs
- ListViewGroupItemCollection.cs
- CookieProtection.cs
- ColumnTypeConverter.cs
- FusionWrap.cs
- SizeF.cs
- TimeSpanSecondsConverter.cs
- CodeTypeDeclaration.cs
- SchemaElement.cs
- Merger.cs
- MexHttpBindingElement.cs
- KeyboardNavigation.cs
- CodePageUtils.cs
- ToolStripDropDownMenu.cs
- ColorComboBox.cs
- ObjectStateManagerMetadata.cs
- KeyBinding.cs
- prefixendpointaddressmessagefilter.cs
- ScriptingJsonSerializationSection.cs
- ToolStripEditorManager.cs
- KnownTypes.cs
- PageWrapper.cs
- ViewBox.cs
- ReaderContextStackData.cs
- InputLanguageManager.cs
- StateMachineWorkflow.cs
- TranslateTransform3D.cs
- Table.cs
- SqlNotificationRequest.cs