diff --git a/src/Bedrock.Framework.Experimental/Protocols/Memcached/MemcachedProtocol.cs b/src/Bedrock.Framework.Experimental/Protocols/Memcached/MemcachedProtocol.cs
index 35b9ecf6..f36d5e29 100644
--- a/src/Bedrock.Framework.Experimental/Protocols/Memcached/MemcachedProtocol.cs
+++ b/src/Bedrock.Framework.Experimental/Protocols/Memcached/MemcachedProtocol.cs
@@ -1,6 +1,8 @@
 using Bedrock.Framework.Experimental.Protocols.Memcached;
 using Bedrock.Framework.Protocols;
+
 using Microsoft.AspNetCore.Connections;
+
 using System;
 using System.Buffers;
 using System.Collections.Concurrent;
@@ -8,12 +10,13 @@
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+
 using static Bedrock.Framework.Experimental.Protocols.Memcached.Enums;
 
 namespace Bedrock.Framework.Experimental.Protocols.Memcached
 {
     public class MemcachedProtocol
-    {        
+    {
         private readonly ConnectionContext _connection;
         private readonly MemcachedMessageWriter _memcachedMessageWriter;
         private readonly MemcachedMessageReader _memcachedMessageReader;
@@ -40,6 +43,8 @@ public MemcachedProtocol(ConnectionContext connection)
 
         private async Task<byte[]> CommandWithResult(MemcachedRequest request)
         {
+            await _semaphore.WaitAsync();
+
             try
             {
                 var result = await ExecuteCommand(request);
@@ -53,13 +58,15 @@ private async Task<byte[]> CommandWithResult(MemcachedRequest request)
                 }
             }
             finally
-            {                
+            {
                 _semaphore.Release();
             }
         }
 
         private async Task CommandWithNoResult(MemcachedRequest request)
         {
+            await _semaphore.WaitAsync();
+
             try
             {
                 var result = await ExecuteCommand(request);
@@ -73,59 +80,44 @@ private async Task CommandWithNoResult(MemcachedRequest request)
                 _semaphore.Release();
             }
         }
-       
-        public async Task<byte[]> Get(string key)
+
+        public Task<byte[]> Get(string key)
         {
-            await _semaphore.WaitAsync();
-            
-            var keyBytes = Encoding.UTF8.GetBytes(key);
-            var request = new MemcachedRequest(Enums.Opcode.Get, keyBytes, NextOpaque);
+            var request = new MemcachedRequest(Enums.Opcode.Get, key, NextOpaque);
 
-            return await CommandWithResult(request);                   
+            return CommandWithResult(request);
         }
 
-        public async Task Delete(string key)
+        public Task Delete(string key)
         {
-            await _semaphore.WaitAsync();
-           
-            var keyBytes = Encoding.UTF8.GetBytes(key);
-            var request = new MemcachedRequest(Enums.Opcode.Delete, keyBytes, NextOpaque);
+            var request = new MemcachedRequest(Enums.Opcode.Delete, key, NextOpaque);
 
-            await CommandWithNoResult(request);
+            return CommandWithNoResult(request);
         }
 
-        public async Task Set(string key, byte[] value, TimeSpan? expireIn)
+        public Task Set(string key, byte[] value, TimeSpan? expireIn)
         {
-            await _semaphore.WaitAsync();
+            var request = new MemcachedRequest(Enums.Opcode.Set, key, NextOpaque, value, TypeCode.Object, expireIn);
 
-            var keyBytes = Encoding.UTF8.GetBytes(key);            
-            var request = new MemcachedRequest(Enums.Opcode.Set, keyBytes, NextOpaque, value, TypeCode.Object, expireIn);
-
-            await CommandWithNoResult(request);          
+            return CommandWithNoResult(request);
         }
 
-        public async Task Add(string key, byte[] value, TimeSpan? expireIn)
+        public Task Add(string key, byte[] value, TimeSpan? expireIn)
         {
-            await _semaphore.WaitAsync();
+            var request = new MemcachedRequest(Enums.Opcode.Add, key, NextOpaque, value, TypeCode.Object, expireIn);
 
-            var keyBytes = Encoding.UTF8.GetBytes(key);
-            var request = new MemcachedRequest(Enums.Opcode.Add, keyBytes, NextOpaque, value, TypeCode.Object, expireIn);
-
-            await CommandWithNoResult(request);
+            return CommandWithNoResult(request);
         }
 
-        public async Task Replace(string key, byte[] value, TimeSpan? expireIn)
+        public Task Replace(string key, byte[] value, TimeSpan? expireIn)
         {
-            await _semaphore.WaitAsync();
+            var request = new MemcachedRequest(Enums.Opcode.Replace, key, NextOpaque, value, TypeCode.Object, expireIn);
 
-            var keyBytes = Encoding.UTF8.GetBytes(key);
-            var request = new MemcachedRequest(Enums.Opcode.Replace, keyBytes, NextOpaque, value, TypeCode.Object, expireIn);
-
-            await CommandWithNoResult(request);
+            return CommandWithNoResult(request);
         }
 
         private async Task<MemcachedResponse> ExecuteCommand(MemcachedRequest request)
-        {           
+        {
             await _protocolWriter.WriteAsync(_memcachedMessageWriter, request);
             var result = await _protocolReader.ReadAsync(_memcachedMessageReader);
             _protocolReader.Advance();
diff --git a/src/Bedrock.Framework.Experimental/Protocols/Memcached/MemcachedRequest.cs b/src/Bedrock.Framework.Experimental/Protocols/Memcached/MemcachedRequest.cs
index b76b0cfa..ddbbefbb 100644
--- a/src/Bedrock.Framework.Experimental/Protocols/Memcached/MemcachedRequest.cs
+++ b/src/Bedrock.Framework.Experimental/Protocols/Memcached/MemcachedRequest.cs
@@ -14,21 +14,38 @@ public class MemcachedRequest
         public TypeCode Flags { get; }
         public TimeSpan? ExpireIn { get; }
 
-        public MemcachedRequest(Opcode opcode, byte[] key, uint opaque,byte[] value, TypeCode flags, TimeSpan ? expireIn=null)
+        public MemcachedRequest(Opcode opcode, string key, uint opaque, byte[] value, TypeCode flags, TimeSpan? expireIn = null)
         {
-            Opcode = opcode;
-            Key = key;
-            Opaque = opaque;
-            Value = value;
-            Flags = flags;
-            ExpireIn = expireIn;            
+            Opcode   = opcode;
+            Key      = Encoding.UTF8.GetBytes(key);
+            Opaque   = opaque;
+            Value    = value;
+            Flags    = flags;
+            ExpireIn = expireIn;
+        }
+
+        public MemcachedRequest(Opcode opcode, byte[] key, uint opaque, byte[] value, TypeCode flags, TimeSpan? expireIn = null)
+        {
+            Opcode   = opcode;
+            Key      = key;
+            Opaque   = opaque;
+            Value    = value;
+            Flags    = flags;
+            ExpireIn = expireIn;
         }
 
         public MemcachedRequest(Opcode opcode, byte[] key, uint opaque)
         {
             Opcode = opcode;
-            Key = key;
+            Key    = key;
             Opaque = opaque;   
         }
+
+        public MemcachedRequest(Opcode opcode, string key, uint opaque)
+        {
+            Opcode = opcode;
+            Key    = Encoding.UTF8.GetBytes(key);
+            Opaque = opaque;
+        }
     }
 }