//
        protected override bool OnEndWaitForChannel(IAsyncResult result)
        {
            if (null == result)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("result");
            }

            DoneAsyncResult doneAsyncResult = result as DoneAsyncResult;

            if (doneAsyncResult != null)
            {
                return(DoneAsyncResult.End(result));
            }
            else
            {
                try
                {
                    return(this.receiver.EndWaitForMessage(result));
                }
                catch (MsmqException ex)
                {
                    if (ex.FaultReceiver)
                    {
                        this.Fault();
                    }
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(ex.Normalized);
                }
            }
        }