public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink)
        {
            if (syncContext == null)
            {
                return(nextSink.AsyncProcessMessage(msg, replySink));
            }

            // Make a copy of the message since MS.NET seems to free the original message
            // once it has been dispatched.
            if (!isMono)
            {
                msg = new MethodCall(msg);
            }

            MsgData md = new MsgData();

            md.InMessage = msg;
            md.ReplySink = replySink;
            syncContext.AsyncDispatch(new StatefulMessageHandler(AsyncDispatchMessage), md);
            return(null);
        }