Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Data / System / Data / Common / DBAsyncResult.cs / 1 / DBAsyncResult.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.Common {
using System;
using System.Data.ProviderBase;
using System.Diagnostics;
using System.Threading;
internal sealed class DbAsyncResult : IAsyncResult {
private readonly AsyncCallback _callback = null;
private bool _fCompleted = false;
private bool _fCompletedSynchronously = false;
private readonly ManualResetEvent _manualResetEvent = null;
private object _owner = null;
private readonly object _stateObject = null;
private readonly string _endMethodName;
private ExecutionContext _execContext = null;
static private ContextCallback _contextCallback = new ContextCallback(AsyncCallback_Context);
// Used for SqlClient Open async
private DbConnectionInternal _connectionInternal = null;
internal DbAsyncResult(object owner, string endMethodName, AsyncCallback callback, object stateObject, ExecutionContext execContext) {
_owner = owner;
_endMethodName = endMethodName;
_callback = callback;
_stateObject = stateObject;
_manualResetEvent = new ManualResetEvent(false);
_execContext = execContext;
}
object IAsyncResult.AsyncState {
get {
return _stateObject;
}
}
WaitHandle IAsyncResult.AsyncWaitHandle {
get {
return _manualResetEvent;
}
}
bool IAsyncResult.CompletedSynchronously {
get {
return _fCompletedSynchronously;
}
}
internal DbConnectionInternal ConnectionInternal {
get {
return _connectionInternal;
}
set {
_connectionInternal = value;
}
}
bool IAsyncResult.IsCompleted {
get {
return _fCompleted;
}
}
internal string EndMethodName {
get {
return _endMethodName;
}
}
internal void CompareExchangeOwner(object owner, string method) {
object prior = Interlocked.CompareExchange(ref _owner, null, owner);
if (prior != owner) {
if (null != prior) {
throw ADP.IncorrectAsyncResult();
}
throw ADP.MethodCalledTwice(method);
}
}
internal void Reset() {
_fCompleted = false;
_fCompletedSynchronously = false;
_manualResetEvent.Reset();
}
internal void SetCompleted() {
_fCompleted = true;
_manualResetEvent.Set();
if (_callback != null) {
// QueueUserWorkItem only accepts WaitCallback - which requires a signature of Foo(object state).
// Must call function on this object with that signature - and then call user AsyncCallback.
// AsyncCallback signature is Foo(IAsyncResult result).
ThreadPool.QueueUserWorkItem(new WaitCallback(ExecuteCallback), this);
}
}
internal void SetCompletedSynchronously() {
_fCompletedSynchronously = true;
}
static private void AsyncCallback_Context(Object state)
{
DbAsyncResult result = (DbAsyncResult) state;
if (result._callback != null) {
result._callback(result);
}
}
private void ExecuteCallback(object asyncResult) {
DbAsyncResult result = (DbAsyncResult) asyncResult;
if (null != result._callback) {
if (result._execContext != null) {
ExecutionContext.Run(result._execContext, DbAsyncResult._contextCallback, result);
} else {
result._callback(this);
}
}
}
}
}
// 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
- CommonProperties.cs
- ToolBarTray.cs
- RenderCapability.cs
- PenLineCapValidation.cs
- CacheOutputQuery.cs
- TouchesCapturedWithinProperty.cs
- Pen.cs
- SqlServer2KCompatibilityAnnotation.cs
- WebHttpBinding.cs
- WasEndpointConfigContainer.cs
- EnumBuilder.cs
- TreeViewImageIndexConverter.cs
- EntityModelSchemaGenerator.cs
- HttpRequest.cs
- ProtectedProviderSettings.cs
- WorkflowMarkupSerializationException.cs
- PipeStream.cs
- EmbossBitmapEffect.cs
- entitydatasourceentitysetnameconverter.cs
- TextPatternIdentifiers.cs
- Expressions.cs
- SettingsAttributeDictionary.cs
- PeerCollaboration.cs
- SapiGrammar.cs
- __ComObject.cs
- HttpDebugHandler.cs
- FormViewDeleteEventArgs.cs
- FormsAuthenticationUser.cs
- TypeInitializationException.cs
- XmlSchemaNotation.cs
- QilVisitor.cs
- AssemblyCollection.cs
- RestHandlerFactory.cs
- StyleSelector.cs
- SoapMessage.cs
- WhitespaceRuleLookup.cs
- XmlCompatibilityReader.cs
- HttpGetProtocolImporter.cs
- HttpClientCertificate.cs
- XsltContext.cs
- ServiceHostFactory.cs
- MetadataItemCollectionFactory.cs
- IfAction.cs
- DelegatedStream.cs
- EUCJPEncoding.cs
- EventLogInternal.cs
- DataKeyArray.cs
- AssemblyHash.cs
- CompModSwitches.cs
- Win32MouseDevice.cs
- RoleManagerModule.cs
- NotifyParentPropertyAttribute.cs
- FlowLayoutSettings.cs
- DesignerCommandAdapter.cs
- PointConverter.cs
- WebPartDescriptionCollection.cs
- SqlDataSourceDesigner.cs
- TypeNameConverter.cs
- BooleanAnimationBase.cs
- ErrorStyle.cs
- SimpleHandlerFactory.cs
- Label.cs
- IOThreadTimer.cs
- TypeDefinition.cs
- PublisherMembershipCondition.cs
- AppSettingsReader.cs
- WorkflowRuntimeSection.cs
- PatternMatchRules.cs
- SortableBindingList.cs
- CustomCredentialPolicy.cs
- ProviderCollection.cs
- SafeNativeMethods.cs
- ArgumentException.cs
- BitmapEffectDrawing.cs
- ChtmlTextWriter.cs
- SecurityKeyUsage.cs
- MULTI_QI.cs
- ByteStreamGeometryContext.cs
- WebServiceFault.cs
- DataServiceRequestException.cs
- FormViewDeleteEventArgs.cs
- Merger.cs
- ItemDragEvent.cs
- FormatConvertedBitmap.cs
- ServiceNameCollection.cs
- ServiceModelInstallComponent.cs
- XmlnsCache.cs
- EdmScalarPropertyAttribute.cs
- ClassHandlersStore.cs
- JavaScriptString.cs
- TreeNodeEventArgs.cs
- StatusBar.cs
- Rectangle.cs
- DetailsView.cs
- ProtocolsSection.cs
- DetailsViewUpdatedEventArgs.cs
- KeySplineConverter.cs
- TemplateInstanceAttribute.cs
- latinshape.cs
- WebControlsSection.cs