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
- PerformanceCounterManager.cs
- NativeMethods.cs
- InputBinder.cs
- UnionExpr.cs
- BrowserCapabilitiesFactory.cs
- XmlEventCache.cs
- DataGridViewBindingCompleteEventArgs.cs
- ThreadStaticAttribute.cs
- CreateUserWizardStep.cs
- InstanceDataCollectionCollection.cs
- MonikerUtility.cs
- ZipIOLocalFileBlock.cs
- Number.cs
- TargetException.cs
- InstalledVoice.cs
- ManagementException.cs
- EnumMember.cs
- ProtocolsSection.cs
- XsltArgumentList.cs
- Queue.cs
- TextBox.cs
- Context.cs
- ReadOnlyMetadataCollection.cs
- DecimalConverter.cs
- WsdlParser.cs
- InvalidPropValue.cs
- FrameworkContentElement.cs
- UIElementAutomationPeer.cs
- ContractCodeDomInfo.cs
- BitHelper.cs
- Directory.cs
- Stream.cs
- HttpHandlerActionCollection.cs
- StrokeDescriptor.cs
- controlskin.cs
- TextElement.cs
- StateChangeEvent.cs
- DoubleLinkListEnumerator.cs
- CoTaskMemUnicodeSafeHandle.cs
- ObjectDataSourceView.cs
- MoveSizeWinEventHandler.cs
- ApplicationFileParser.cs
- ParseElement.cs
- BamlTreeUpdater.cs
- PageCodeDomTreeGenerator.cs
- EdmMember.cs
- sqlmetadatafactory.cs
- SqlBooleanMismatchVisitor.cs
- UrlPropertyAttribute.cs
- Resources.Designer.cs
- XPathPatternParser.cs
- BindingContext.cs
- OracleFactory.cs
- RepeatInfo.cs
- XmlAttribute.cs
- SecurityStandardsManager.cs
- DragEventArgs.cs
- ConfigurationSectionGroupCollection.cs
- WmfPlaceableFileHeader.cs
- ContextProperty.cs
- FontSizeConverter.cs
- SqlFunctionAttribute.cs
- IsolatedStorageFileStream.cs
- PerfCounterSection.cs
- HttpBufferlessInputStream.cs
- TTSVoice.cs
- EntityDataSourceWrapper.cs
- ScriptRegistrationManager.cs
- WebPartDisplayModeEventArgs.cs
- AnnotationHighlightLayer.cs
- WebPartDesigner.cs
- SpecialNameAttribute.cs
- CubicEase.cs
- XmlReflectionMember.cs
- InfiniteTimeSpanConverter.cs
- ContentWrapperAttribute.cs
- AbandonedMutexException.cs
- HostExecutionContextManager.cs
- _ChunkParse.cs
- LinkLabelLinkClickedEvent.cs
- TextRange.cs
- ExpressionValueEditor.cs
- GradientStop.cs
- XamlTemplateSerializer.cs
- IItemProperties.cs
- TracedNativeMethods.cs
- CommonDialog.cs
- Floater.cs
- ListViewItem.cs
- MenuItemStyleCollection.cs
- FixedSOMContainer.cs
- SelfIssuedSamlTokenFactory.cs
- WindowsFormsSectionHandler.cs
- TokenBasedSetEnumerator.cs
- DataTableNameHandler.cs
- OpenTypeCommon.cs
- TextViewSelectionProcessor.cs
- CalendarDayButton.cs
- AdRotator.cs
- BitmapMetadata.cs