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
- RadioButtonFlatAdapter.cs
- WebEventTraceProvider.cs
- DocumentReferenceCollection.cs
- DataGridView.cs
- BitStream.cs
- UniqueID.cs
- GeneralTransform.cs
- FacetDescriptionElement.cs
- XmlDataSourceNodeDescriptor.cs
- TypeGeneratedEventArgs.cs
- storepermissionattribute.cs
- ContractMapping.cs
- CorrelationKey.cs
- IpcServerChannel.cs
- storepermission.cs
- SchemaElementDecl.cs
- DSASignatureDeformatter.cs
- BufferedOutputStream.cs
- AttributeAction.cs
- KeyValueInternalCollection.cs
- QilFunction.cs
- DesignerListAdapter.cs
- WindowsRebar.cs
- SapiGrammar.cs
- util.cs
- CopyOnWriteList.cs
- InstanceDataCollectionCollection.cs
- FilterQueryOptionExpression.cs
- SendDesigner.xaml.cs
- DynamicArgumentDesigner.xaml.cs
- webproxy.cs
- _Events.cs
- StackOverflowException.cs
- IgnoreFlushAndCloseStream.cs
- ListItemParagraph.cs
- DPTypeDescriptorContext.cs
- ControlParser.cs
- ScriptManager.cs
- BlobPersonalizationState.cs
- DataViewSetting.cs
- Converter.cs
- GroupBoxDesigner.cs
- AttributeCollection.cs
- DataKeyArray.cs
- PeerEndPoint.cs
- ConfigurationManager.cs
- ObjectStateFormatter.cs
- StackBuilderSink.cs
- TextEditorThreadLocalStore.cs
- MatrixTransform3D.cs
- GraphicsContainer.cs
- Int32CollectionValueSerializer.cs
- AlternateView.cs
- GPPOINTF.cs
- TextBreakpoint.cs
- MarkupExtensionParser.cs
- HtmlToClrEventProxy.cs
- ValidationManager.cs
- HtmlShim.cs
- HttpChannelHelper.cs
- dataprotectionpermission.cs
- PeerNodeTraceRecord.cs
- Math.cs
- Zone.cs
- selecteditemcollection.cs
- MetadataArtifactLoaderFile.cs
- LoggedException.cs
- TableCell.cs
- codemethodreferenceexpression.cs
- XPathBinder.cs
- MemberInfoSerializationHolder.cs
- VsPropertyGrid.cs
- XhtmlCssHandler.cs
- CodeEntryPointMethod.cs
- SpeakProgressEventArgs.cs
- RawStylusInputReport.cs
- ObjectListItemCollection.cs
- SqlGenerator.cs
- AppDomainShutdownMonitor.cs
- DataTrigger.cs
- EvidenceTypeDescriptor.cs
- StopStoryboard.cs
- EdmEntityTypeAttribute.cs
- DbgCompiler.cs
- ClientUrlResolverWrapper.cs
- Scripts.cs
- ServiceContractListItemList.cs
- ReadContentAsBinaryHelper.cs
- TextTreeRootNode.cs
- StylusPointPropertyInfo.cs
- AsymmetricKeyExchangeDeformatter.cs
- TextBoxView.cs
- RegexFCD.cs
- StreamHelper.cs
- Triplet.cs
- SoapClientMessage.cs
- DateTimeSerializationSection.cs
- ValueExpressions.cs
- HelpKeywordAttribute.cs
- EventArgs.cs