AMQNET-637 Implementation of async message factory methods for producers
diff --git a/src/NMS.AMQP/NmsMessageProducer.cs b/src/NMS.AMQP/NmsMessageProducer.cs
index e215861..f3fd06e 100644
--- a/src/NMS.AMQP/NmsMessageProducer.cs
+++ b/src/NMS.AMQP/NmsMessageProducer.cs
@@ -135,48 +135,96 @@
             return session.CreateMessage();
         }
 
+        public async Task<IMessage> CreateMessageAsync()
+        {
+            CheckClosed();
+            return await session.CreateMessageAsync();
+        }
+
         public ITextMessage CreateTextMessage()
         {
             CheckClosed();
             return session.CreateTextMessage();
         }
 
+        public async Task<ITextMessage> CreateTextMessageAsync()
+        {
+            CheckClosed();
+            return await session.CreateTextMessageAsync();
+        }
+
         public ITextMessage CreateTextMessage(string text)
         {
             CheckClosed();
             return session.CreateTextMessage(text);
         }
 
+        public async Task<ITextMessage> CreateTextMessageAsync(string text)
+        {
+            CheckClosed();
+            return await session.CreateTextMessageAsync(text);
+        }
+
         public IMapMessage CreateMapMessage()
         {
             CheckClosed();
             return session.CreateMapMessage();
         }
 
+        public async Task<IMapMessage> CreateMapMessageAsync()
+        {
+            CheckClosed();
+            return await session.CreateMapMessageAsync();
+        }
+
         public IObjectMessage CreateObjectMessage(object body)
         {
             CheckClosed();
             return session.CreateObjectMessage(body);
         }
 
+        public async Task<IObjectMessage> CreateObjectMessageAsync(object body)
+        {
+            CheckClosed();
+            return await session.CreateObjectMessageAsync(body);
+        }
+
         public IBytesMessage CreateBytesMessage()
         {
             CheckClosed();
             return session.CreateBytesMessage();
         }
 
+        public async Task<IBytesMessage> CreateBytesMessageAsync()
+        {
+            CheckClosed();
+            return await session.CreateBytesMessageAsync();
+        }
+
         public IBytesMessage CreateBytesMessage(byte[] body)
         {
             CheckClosed();
             return session.CreateBytesMessage(body);
         }
 
+        public async Task<IBytesMessage> CreateBytesMessageAsync(byte[] body)
+        {
+            CheckClosed();
+            return await session.CreateBytesMessageAsync(body);
+        }
+
         public IStreamMessage CreateStreamMessage()
         {
             CheckClosed();
             return session.CreateStreamMessage();
         }
 
+        public async Task<IStreamMessage> CreateStreamMessageAsync()
+        {
+            CheckClosed();
+            return await session.CreateStreamMessageAsync();
+        }
+
         public ProducerTransformerDelegate ProducerTransformer { get; set; }
 
         public MsgDeliveryMode DeliveryMode
diff --git a/src/NMS.AMQP/NmsProducer.cs b/src/NMS.AMQP/NmsProducer.cs
index fad1a2c..c095e69 100644
--- a/src/NMS.AMQP/NmsProducer.cs
+++ b/src/NMS.AMQP/NmsProducer.cs
@@ -161,41 +161,81 @@
             return session.CreateMessage();
         }
 
+        public Task<IMessage> CreateMessageAsync()
+        {
+            return session.CreateMessageAsync();
+        }
+
         public ITextMessage CreateTextMessage()
         {
             return session.CreateTextMessage();
         }
 
+        public Task<ITextMessage> CreateTextMessageAsync()
+        {
+            return session.CreateTextMessageAsync();
+        }
+
         public ITextMessage CreateTextMessage(string text)
         {
             return session.CreateTextMessage(text);
         }
 
+        public Task<ITextMessage> CreateTextMessageAsync(string text)
+        {
+            return session.CreateTextMessageAsync(text);
+        }
+
         public IMapMessage CreateMapMessage()
         {
             return session.CreateMapMessage();
         }
 
+        public Task<IMapMessage> CreateMapMessageAsync()
+        {
+            return session.CreateMapMessageAsync();
+        }
+
         public IObjectMessage CreateObjectMessage(object body)
         {
             return session.CreateObjectMessage(body);
         }
 
+        public Task<IObjectMessage> CreateObjectMessageAsync(object body)
+        {
+            return session.CreateObjectMessageAsync(body);
+        }
+
         public IBytesMessage CreateBytesMessage()
         {
             return session.CreateBytesMessage();
         }
 
+        public Task<IBytesMessage> CreateBytesMessageAsync()
+        {
+            return session.CreateBytesMessageAsync();
+        }
+
         public IBytesMessage CreateBytesMessage(byte[] body)
         {
             return session.CreateBytesMessage(body);
         }
 
+        public Task<IBytesMessage> CreateBytesMessageAsync(byte[] body)
+        {
+            return session.CreateBytesMessageAsync(body);
+        }
+
         public IStreamMessage CreateStreamMessage()
         {
             return session.CreateStreamMessage();
         }
 
+        public Task<IStreamMessage> CreateStreamMessageAsync()
+        {
+            return session.CreateStreamMessageAsync();
+        }
+
         public void Close()
         {
             producer.Close();