internal override Message RequestCorrelated(Message msg, TimeSpan timeout, IOutputChannel channel) { DateTime startTime = DateTime.Now; Message ret = null; ManualResetEvent wait = new ManualResetEvent(false); Action <Message> handler = delegate(Message reply) { ret = reply; wait.Set(); }; ReplyHandlerQueue.Enqueue(handler); channel.Send(msg, timeout); if (ret == null && !wait.WaitOne(timeout - (DateTime.Now - startTime))) { throw new TimeoutException(); } return(ret); }