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
- XmlRootAttribute.cs
- SupportsEventValidationAttribute.cs
- WebBrowserUriTypeConverter.cs
- DataTableCollection.cs
- EntityContainerEmitter.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- JsonXmlDataContract.cs
- ReadOnlyHierarchicalDataSourceView.cs
- QueryException.cs
- NavigationEventArgs.cs
- CleanUpVirtualizedItemEventArgs.cs
- IndentTextWriter.cs
- WindowsFormsSectionHandler.cs
- GridProviderWrapper.cs
- EventRoute.cs
- PkcsUtils.cs
- NativeBuffer.cs
- SqlInternalConnectionTds.cs
- DeploymentSection.cs
- UIPermission.cs
- ModuleElement.cs
- StylusOverProperty.cs
- MexHttpBindingCollectionElement.cs
- DBCSCodePageEncoding.cs
- BindingExpression.cs
- ZipIORawDataFileBlock.cs
- WebControlsSection.cs
- columnmapkeybuilder.cs
- EntityProviderFactory.cs
- TreeViewCancelEvent.cs
- FormViewAutoFormat.cs
- ScrollProviderWrapper.cs
- PolicyDesigner.cs
- XMLDiffLoader.cs
- SegmentInfo.cs
- IssuedSecurityTokenParameters.cs
- DataGridViewButtonColumn.cs
- BuildProvider.cs
- MonitorWrapper.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- SchemaSetCompiler.cs
- PseudoWebRequest.cs
- CalendarTable.cs
- SearchForVirtualItemEventArgs.cs
- PrinterUnitConvert.cs
- EntityContainerAssociationSet.cs
- PropertyTabAttribute.cs
- NameSpaceExtractor.cs
- Constants.cs
- RelationshipEndCollection.cs
- userdatakeys.cs
- ListViewUpdatedEventArgs.cs
- LoginCancelEventArgs.cs
- WindowsTooltip.cs
- TrackingDataItemValue.cs
- PartialTrustVisibleAssemblyCollection.cs
- TableLayoutColumnStyleCollection.cs
- SystemUnicastIPAddressInformation.cs
- Emitter.cs
- DataGridParentRows.cs
- BamlVersionHeader.cs
- MenuBase.cs
- CharacterShapingProperties.cs
- DeviceContext.cs
- ElementAction.cs
- LongSumAggregationOperator.cs
- ColorContextHelper.cs
- InfoCardRSACryptoProvider.cs
- FileDialog.cs
- WebPartUserCapability.cs
- FilterException.cs
- AppDomainResourcePerfCounters.cs
- DesignerSelectionListAdapter.cs
- DbParameterCollectionHelper.cs
- PeerName.cs
- RightsManagementEncryptedStream.cs
- GroupItem.cs
- HostedNamedPipeTransportManager.cs
- __Filters.cs
- FixedStringLookup.cs
- CommonXSendMessage.cs
- WindowsFormsHostPropertyMap.cs
- SymbolEqualComparer.cs
- ResourcePool.cs
- ScriptMethodAttribute.cs
- Parameter.cs
- RecognitionEventArgs.cs
- PackageFilter.cs
- RetriableClipboard.cs
- DataTableCollection.cs
- ListDictionaryInternal.cs
- FileUtil.cs
- OleDbConnectionInternal.cs
- NameObjectCollectionBase.cs
- StorageComplexTypeMapping.cs
- safemediahandle.cs
- ParallelLoopState.cs
- SplitterPanel.cs
- DataControlFieldCollection.cs
- PageAsyncTask.cs