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
- InplaceBitmapMetadataWriter.cs
- TableItemStyle.cs
- SocketCache.cs
- HostSecurityManager.cs
- LoadWorkflowCommand.cs
- FormViewUpdateEventArgs.cs
- RijndaelCryptoServiceProvider.cs
- MulticastDelegate.cs
- AccessText.cs
- EnumValidator.cs
- LinqDataSourceDisposeEventArgs.cs
- URL.cs
- NetNamedPipeSecurityMode.cs
- HScrollProperties.cs
- TreeViewAutomationPeer.cs
- WebPartUtil.cs
- ImmutableObjectAttribute.cs
- ComIntegrationManifestGenerator.cs
- SHA1CryptoServiceProvider.cs
- Normalization.cs
- ListViewDataItem.cs
- DataBoundControl.cs
- MatrixTransform.cs
- AssemblyAttributes.cs
- OperationSelectorBehavior.cs
- XslAst.cs
- RegexStringValidatorAttribute.cs
- SerializationInfo.cs
- ConnectionPoint.cs
- DataListCommandEventArgs.cs
- LicenseManager.cs
- StrokeCollectionConverter.cs
- AppModelKnownContentFactory.cs
- RecognitionEventArgs.cs
- XmlElementAttributes.cs
- TemplateParser.cs
- InternalSafeNativeMethods.cs
- NaturalLanguageHyphenator.cs
- OpenTypeMethods.cs
- ServiceOperationWrapper.cs
- ExpressionCopier.cs
- PageCopyCount.cs
- CookieParameter.cs
- ContractDescription.cs
- SoapReflectionImporter.cs
- TypeElement.cs
- PropertyDescriptorComparer.cs
- MsmqIntegrationChannelListener.cs
- StylusTouchDevice.cs
- FormsAuthenticationCredentials.cs
- MachineKeyConverter.cs
- XmlSchemaGroup.cs
- ToolbarAUtomationPeer.cs
- SR.cs
- ExtendedPropertyInfo.cs
- GeneralTransformGroup.cs
- WebPartConnectionCollection.cs
- ToolBarTray.cs
- PageCodeDomTreeGenerator.cs
- FileDialog_Vista.cs
- MissingMemberException.cs
- Avt.cs
- WebServiceEnumData.cs
- DiscardableAttribute.cs
- SearchExpression.cs
- ValidationService.cs
- ContentHostHelper.cs
- FunctionOverloadResolver.cs
- FloaterParaClient.cs
- RecognizedWordUnit.cs
- DesignerCommandSet.cs
- ObjectItemCollection.cs
- NamespaceQuery.cs
- HttpListenerRequestUriBuilder.cs
- QueryReaderSettings.cs
- ChannelDispatcherCollection.cs
- DelegatingConfigHost.cs
- SqlLiftIndependentRowExpressions.cs
- WebPartTransformer.cs
- DataGridViewSelectedColumnCollection.cs
- OdbcPermission.cs
- ContextActivityUtils.cs
- LogFlushAsyncResult.cs
- QueryAccessibilityHelpEvent.cs
- DynamicDocumentPaginator.cs
- CompilerGlobalScopeAttribute.cs
- XPathDescendantIterator.cs
- NestPullup.cs
- ZipPackage.cs
- PrintController.cs
- MessagePartSpecification.cs
- GridToolTip.cs
- ItemsChangedEventArgs.cs
- Comparer.cs
- ReverseInheritProperty.cs
- SecurityElement.cs
- SchemaImporterExtension.cs
- Timeline.cs
- BoolExpression.cs
- Metadata.cs