static void OnPreambleComplete(IAsyncResult result)
            {
                if (result.CompletedSynchronously)
                {
                    return;
                }

                CompleteSingletonPreambleAndDispatchRequestAsyncResult thisPtr = (CompleteSingletonPreambleAndDispatchRequestAsyncResult)result.AsyncState;
                bool completeSelf = false;

                try
                {
                    completeSelf = thisPtr.HandlePreambleComplete(result);
                }
                catch (Exception ex)
                {
                    if (Fx.IsFatal(ex))
                    {
                        throw;
                    }

                    //Don't complete this AsyncResult with this non-fatal exception.  The calling code can't really do anything with it,
                    //so just trace it (inside of AbortConnection), then ---- it.
                    completeSelf = true;
                    thisPtr.AbortConnection(ex);
                }

                if (completeSelf)
                {
                    thisPtr.Complete(false);
                }
            }
 void EndCompleteSingletonPreamble(IAsyncResult result)
 {
     CompleteSingletonPreambleAndDispatchRequestAsyncResult.End(result);
 }