diff --git a/src/Servers/Kestrel/Core/src/Internal/Http/Http1ContentLengthMessageBody.cs b/src/Servers/Kestrel/Core/src/Internal/Http/Http1ContentLengthMessageBody.cs
index 278fd98769c25e5896e39d23dd38bb61ca70c798..bbe6e0d951c01a8af0170a810b89ddbf89344616 100644
--- a/src/Servers/Kestrel/Core/src/Internal/Http/Http1ContentLengthMessageBody.cs
+++ b/src/Servers/Kestrel/Core/src/Internal/Http/Http1ContentLengthMessageBody.cs
@@ -5,6 +5,7 @@ using System;
 using System.Diagnostics;
 using System.Globalization;
 using System.IO.Pipelines;
+using System.Runtime.CompilerServices;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.AspNetCore.Connections;
@@ -29,6 +30,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
             _unexaminedInputLength = contentLength;
         }
 
+        [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))]
         public override async ValueTask<ReadResult> ReadAsyncInternal(CancellationToken cancellationToken = default)
         {
             VerifyIsNotReading();
diff --git a/src/Servers/Kestrel/Core/src/Internal/Http/Http1UpgradeMessageBody.cs b/src/Servers/Kestrel/Core/src/Internal/Http/Http1UpgradeMessageBody.cs
index 2ea7420da2e1ff748717df451710a05aa3735f6f..643b3ce424b9b9b9c96382dc4f085df82670ba83 100644
--- a/src/Servers/Kestrel/Core/src/Internal/Http/Http1UpgradeMessageBody.cs
+++ b/src/Servers/Kestrel/Core/src/Internal/Http/Http1UpgradeMessageBody.cs
@@ -3,6 +3,7 @@
 
 using System;
 using System.IO.Pipelines;
+using System.Runtime.CompilerServices;
 using System.Threading;
 using System.Threading.Tasks;
 
@@ -92,6 +93,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
             return new ValueTask<ReadResult>(readResult);
         }
 
+        [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))]
         private async ValueTask<ReadResult> ReadAsyncInternalAwaited(ValueTask<ReadResult> readTask, CancellationToken cancellationToken = default)
         {
             var readResult = await readTask;
diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2MessageBody.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2MessageBody.cs
index d0a0d34a159c5cdd33bc83dc732d07bf9c2e28ca..e187d0b1400478c156b0fc7d33a47d23d3fb9592 100644
--- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2MessageBody.cs
+++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2MessageBody.cs
@@ -5,6 +5,7 @@ using System;
 using System.Diagnostics;
 using System.Globalization;
 using System.IO.Pipelines;
+using System.Runtime.CompilerServices;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.AspNetCore.Connections;
@@ -89,6 +90,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
             return hasResult;
         }
 
+        [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))]
         public override async ValueTask<ReadResult> ReadAsync(CancellationToken cancellationToken = default)
         {
             await TryStartAsync();
diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3MessageBody.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3MessageBody.cs
index 86907c6f96672215dbc1aaa464a8b2d3f4554d78..fcaacf41563765c98d3cf9bc5b87711ea4515812 100644
--- a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3MessageBody.cs
+++ b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3MessageBody.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Globalization;
 using System.IO.Pipelines;
+using System.Runtime.CompilerServices;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.AspNetCore.Connections;
@@ -68,6 +69,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3
             return hasResult;
         }
 
+        [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))]
         public override async ValueTask<ReadResult> ReadAsync(CancellationToken cancellationToken = default)
         {
             await TryStartAsync();
diff --git a/src/Shared/ServerInfrastructure/DuplexPipeStream.cs b/src/Shared/ServerInfrastructure/DuplexPipeStream.cs
index aed54205c86341b01fcf8a3fdf8a867a575adbda..f177ffb6431852158db0e18ebe5493a455d67ba8 100644
--- a/src/Shared/ServerInfrastructure/DuplexPipeStream.cs
+++ b/src/Shared/ServerInfrastructure/DuplexPipeStream.cs
@@ -8,6 +8,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using System.Buffers;
 using Microsoft.AspNetCore.Internal;
+using System.Runtime.CompilerServices;
 
 #nullable enable
 
@@ -112,6 +113,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal
             return _output.FlushAsync(cancellationToken).GetAsTask();
         }
 
+        [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))]
         private async ValueTask<int> ReadAsyncInternal(Memory<byte> destination, CancellationToken cancellationToken)
         {
             while (true)