Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / Common / DBAsyncResult.cs / 1305376 / 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.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataStorage.cs
- MetadataItemEmitter.cs
- MessageTraceRecord.cs
- ContentPlaceHolder.cs
- EntityTypeBase.cs
- SerializableAttribute.cs
- MouseActionConverter.cs
- InvocationExpression.cs
- UTF8Encoding.cs
- _SingleItemRequestCache.cs
- WorkflowRuntimeSection.cs
- _NativeSSPI.cs
- ScriptResourceHandler.cs
- ColumnClickEvent.cs
- PeerToPeerException.cs
- QuaternionAnimation.cs
- TreeView.cs
- RenderCapability.cs
- Pair.cs
- FrameworkElementFactoryMarkupObject.cs
- DeclarativeCatalogPart.cs
- BaseResourcesBuildProvider.cs
- DataGridViewCellStateChangedEventArgs.cs
- EntityClientCacheEntry.cs
- DesignerDataParameter.cs
- DefaultPrintController.cs
- ColorTransformHelper.cs
- DoubleCollectionConverter.cs
- HwndKeyboardInputProvider.cs
- SecurityContextTokenValidationException.cs
- RemoteHelper.cs
- DbConnectionPoolGroupProviderInfo.cs
- DataException.cs
- OdbcCommandBuilder.cs
- MemberInitExpression.cs
- Vector3DAnimationUsingKeyFrames.cs
- FullTextState.cs
- DecimalAnimationUsingKeyFrames.cs
- ADMembershipUser.cs
- ByteConverter.cs
- FaultConverter.cs
- HitTestDrawingContextWalker.cs
- RawContentTypeMapper.cs
- _ShellExpression.cs
- AsymmetricAlgorithm.cs
- Quaternion.cs
- ComponentResourceManager.cs
- StateChangeEvent.cs
- PKCS1MaskGenerationMethod.cs
- StateMachine.cs
- TimersDescriptionAttribute.cs
- TrustManagerMoreInformation.cs
- GlobalEventManager.cs
- ConfigurationStrings.cs
- HandlerFactoryCache.cs
- AlphabeticalEnumConverter.cs
- XmlNamedNodeMap.cs
- ApplicationServiceManager.cs
- WebPartDeleteVerb.cs
- CacheChildrenQuery.cs
- ZipPackagePart.cs
- ChannelServices.cs
- Screen.cs
- WeakKeyDictionary.cs
- CustomAttribute.cs
- DesignerSerializationOptionsAttribute.cs
- datacache.cs
- FlowDocumentPaginator.cs
- XComponentModel.cs
- ScriptDescriptor.cs
- DrawToolTipEventArgs.cs
- Baml2006SchemaContext.cs
- SafeNativeMethods.cs
- login.cs
- AnnotationAdorner.cs
- selecteditemcollection.cs
- OleDbError.cs
- AsyncParams.cs
- ProfileEventArgs.cs
- CompilerGeneratedAttribute.cs
- Cursor.cs
- Rectangle.cs
- precedingsibling.cs
- ProbeRequestResponseAsyncResult.cs
- DigestComparer.cs
- IOException.cs
- XPathSingletonIterator.cs
- InlineUIContainer.cs
- ComboBox.cs
- HttpProcessUtility.cs
- DependencyPropertyChangedEventArgs.cs
- MarkupObject.cs
- ClientType.cs
- SuppressMessageAttribute.cs
- OptimizerPatterns.cs
- EventDescriptor.cs
- StoreAnnotationsMap.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- LoadWorkflowCommand.cs
- ManifestBasedResourceGroveler.cs