Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
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
- IConvertible.cs
- ListBoxItem.cs
- SQLDouble.cs
- SchemaImporterExtensionElementCollection.cs
- IdentityNotMappedException.cs
- Region.cs
- PolygonHotSpot.cs
- X509Utils.cs
- DesignerContextDescriptor.cs
- ConnectionString.cs
- X509UI.cs
- StaticFileHandler.cs
- DesignTimeParseData.cs
- XmlWriterTraceListener.cs
- DataGridState.cs
- QilXmlWriter.cs
- CompilerTypeWithParams.cs
- XmlDataLoader.cs
- _AcceptOverlappedAsyncResult.cs
- TableLayoutColumnStyleCollection.cs
- HttpSocketManager.cs
- FactoryRecord.cs
- DataControlLinkButton.cs
- UnaryQueryOperator.cs
- HtmlTernaryTree.cs
- WindowsToolbarAsMenu.cs
- StringComparer.cs
- TitleStyle.cs
- Function.cs
- SafeNativeMemoryHandle.cs
- AutomationPropertyInfo.cs
- TypeBuilder.cs
- AbstractExpressions.cs
- ErrorHandler.cs
- PrimitiveType.cs
- Hash.cs
- DistributedTransactionPermission.cs
- InputLangChangeEvent.cs
- SqlDataReaderSmi.cs
- LoginCancelEventArgs.cs
- AssemblySettingAttributes.cs
- EntityDataSourceDataSelection.cs
- CodeLabeledStatement.cs
- WebPartConnectVerb.cs
- RangeValidator.cs
- Task.cs
- MethodToken.cs
- CssTextWriter.cs
- ListViewDataItem.cs
- BindingOperations.cs
- PerfService.cs
- XmlSchemaIdentityConstraint.cs
- ControlValuePropertyAttribute.cs
- EventLogPermissionAttribute.cs
- SiteMap.cs
- WebControlParameterProxy.cs
- Monitor.cs
- ThreadStartException.cs
- TextTreeTextNode.cs
- XmlProcessingInstruction.cs
- GetLedgerEntryForRecipientRequest.cs
- ProviderConnectionPointCollection.cs
- cryptoapiTransform.cs
- AlternateView.cs
- XmlSchemaObject.cs
- DataServiceHost.cs
- MouseBinding.cs
- BitmapEffectRenderDataResource.cs
- FixedNode.cs
- path.cs
- GridView.cs
- HMACSHA256.cs
- DataContractJsonSerializerOperationFormatter.cs
- XmlQueryTypeFactory.cs
- PaperSize.cs
- QueryGeneratorBase.cs
- CodeThrowExceptionStatement.cs
- BindingExpressionUncommonField.cs
- XmlCharType.cs
- CngProvider.cs
- Size.cs
- MemberRelationshipService.cs
- UserControl.cs
- ArrangedElementCollection.cs
- ExpressionHelper.cs
- VirtualPath.cs
- ApplyImportsAction.cs
- DataGrid.cs
- ToolStripDropDownButton.cs
- KeyTimeConverter.cs
- SystemIPGlobalProperties.cs
- NegotiateStream.cs
- ArgumentException.cs
- ObjectListDesigner.cs
- CookieProtection.cs
- DatePickerAutomationPeer.cs
- CompiledRegexRunnerFactory.cs
- TextEffect.cs
- ToolStripDropDownButton.cs
- FlowDocumentPaginator.cs