Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- List.cs
- HtmlInputButton.cs
- SQLInt16Storage.cs
- Font.cs
- SecurityChannelFaultConverter.cs
- BindStream.cs
- LineInfo.cs
- DeviceContext2.cs
- FontFamily.cs
- DesignerActionService.cs
- DaylightTime.cs
- OdbcError.cs
- ApplyTemplatesAction.cs
- Grammar.cs
- AssemblyAttributesGoHere.cs
- AbsoluteQuery.cs
- LicenseManager.cs
- Hashtable.cs
- GridViewActionList.cs
- MetadataCacheItem.cs
- HtmlMeta.cs
- ConnectionAcceptor.cs
- OrderingQueryOperator.cs
- CheckBoxList.cs
- EmptyControlCollection.cs
- BindingContext.cs
- ConnectionManagementSection.cs
- MarkerProperties.cs
- RouteData.cs
- DataGridViewRow.cs
- XmlDictionaryReaderQuotas.cs
- InvokeMethodDesigner.xaml.cs
- Cursors.cs
- DbConnectionStringCommon.cs
- ModelUIElement3D.cs
- ProfilePropertySettings.cs
- Stack.cs
- ValidationErrorCollection.cs
- AnnotationAuthorChangedEventArgs.cs
- CodeLinePragma.cs
- AuthenticatingEventArgs.cs
- BitmapScalingModeValidation.cs
- XmlProcessingInstruction.cs
- IsolatedStorageFilePermission.cs
- TableChangeProcessor.cs
- RawStylusInput.cs
- GridEntryCollection.cs
- TrackingWorkflowEventArgs.cs
- DBParameter.cs
- SystemFonts.cs
- TemplateBamlRecordReader.cs
- CreateUserErrorEventArgs.cs
- AutoResetEvent.cs
- ServiceInfoCollection.cs
- SystemParameters.cs
- BindingExpressionBase.cs
- WorkItem.cs
- BufferedReadStream.cs
- XslAstAnalyzer.cs
- SqlTypesSchemaImporter.cs
- FrameworkTextComposition.cs
- TreeViewEvent.cs
- ParameterBuilder.cs
- ServiceContractListItem.cs
- AnnotationHelper.cs
- QuaternionAnimationUsingKeyFrames.cs
- EntityDataSourceStatementEditorForm.cs
- TrackingProvider.cs
- VariantWrapper.cs
- SupportingTokenChannel.cs
- RepeatEnumerable.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- TextPattern.cs
- StreamSecurityUpgradeAcceptorBase.cs
- MenuAdapter.cs
- CodeAttributeDeclarationCollection.cs
- SystemBrushes.cs
- QilVisitor.cs
- DataControlCommands.cs
- XmlILModule.cs
- ISAPIWorkerRequest.cs
- InternalCache.cs
- SmtpCommands.cs
- Enumerable.cs
- SubstitutionDesigner.cs
- FaultDesigner.cs
- PageParser.cs
- MimeMultiPart.cs
- safex509handles.cs
- CultureTableRecord.cs
- EventWaitHandleSecurity.cs
- AssociationSetMetadata.cs
- PromptStyle.cs
- MemoryRecordBuffer.cs
- FaultContext.cs
- SystemWebCachingSectionGroup.cs
- SoapTransportImporter.cs
- DefaultDialogButtons.cs
- XMLUtil.cs
- DBCommandBuilder.cs