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
- RedirectionProxy.cs
- TransportContext.cs
- DataFormats.cs
- SafeHandle.cs
- PerformanceCounterPermissionAttribute.cs
- PropertyContainer.cs
- SortableBindingList.cs
- CodeDefaultValueExpression.cs
- ReflectEventDescriptor.cs
- CompiledXpathExpr.cs
- XhtmlBasicPageAdapter.cs
- SerTrace.cs
- HealthMonitoringSection.cs
- DesignerTextWriter.cs
- __ConsoleStream.cs
- ManualResetEvent.cs
- StyleTypedPropertyAttribute.cs
- XPathArrayIterator.cs
- PathSegmentCollection.cs
- ActivityBuilder.cs
- ColumnClickEvent.cs
- DataRowComparer.cs
- Size3D.cs
- SingleAnimationUsingKeyFrames.cs
- IgnoreSection.cs
- PointLight.cs
- RuleEngine.cs
- OleDbPermission.cs
- SpnEndpointIdentity.cs
- ColumnResult.cs
- WebGetAttribute.cs
- ClientSettings.cs
- NeutralResourcesLanguageAttribute.cs
- WmlValidatorAdapter.cs
- LookupBindingPropertiesAttribute.cs
- QilUnary.cs
- codemethodreferenceexpression.cs
- ServerType.cs
- OleDbConnectionInternal.cs
- DetailsViewDeletedEventArgs.cs
- Pens.cs
- SqlBuilder.cs
- Variable.cs
- Deflater.cs
- DataGridPagerStyle.cs
- ELinqQueryState.cs
- TextElementEnumerator.cs
- LocatorManager.cs
- WindowsPrincipal.cs
- WebServiceHandlerFactory.cs
- LinearKeyFrames.cs
- Location.cs
- ObservableCollectionDefaultValueFactory.cs
- FontUnit.cs
- QueryStringParameter.cs
- NetworkInterface.cs
- EntryPointNotFoundException.cs
- EventWaitHandleSecurity.cs
- Axis.cs
- NominalTypeEliminator.cs
- MembershipSection.cs
- LinkLabel.cs
- UxThemeWrapper.cs
- SqlExpander.cs
- WindowsEditBox.cs
- SmtpLoginAuthenticationModule.cs
- ActivationArguments.cs
- EdmMember.cs
- UInt64Converter.cs
- PerfCounterSection.cs
- AnonymousIdentificationSection.cs
- hwndwrapper.cs
- SynchronizedChannelCollection.cs
- GradientSpreadMethodValidation.cs
- MemberPath.cs
- SQLBinary.cs
- webclient.cs
- TypeReference.cs
- DbDeleteCommandTree.cs
- _Events.cs
- DSASignatureFormatter.cs
- CodeAccessPermission.cs
- ResourceReader.cs
- MaterialCollection.cs
- _ProxyChain.cs
- PlaceHolder.cs
- WebPartCloseVerb.cs
- Gdiplus.cs
- SqlConnectionPoolProviderInfo.cs
- _ConnectionGroup.cs
- BaseValidator.cs
- HttpCookiesSection.cs
- InputScopeManager.cs
- EFAssociationProvider.cs
- DragDrop.cs
- ExtendedProperty.cs
- DiscoveryVersionConverter.cs
- Endpoint.cs
- GenericArgumentsUpdater.cs
- XmlSchemaDatatype.cs