THRIFT-5499: Use blocking Read/Write calls to make sure the Receive/SendTimeout is checked.
Client: netstd
diff --git a/lib/netstd/Thrift/Transport/Client/TStreamTransport.cs b/lib/netstd/Thrift/Transport/Client/TStreamTransport.cs
index 90794c6..053a37b 100644
--- a/lib/netstd/Thrift/Transport/Client/TStreamTransport.cs
+++ b/lib/netstd/Thrift/Transport/Client/TStreamTransport.cs
@@ -80,11 +80,8 @@
                     "Cannot read from null inputstream");
             }
 
-#if NETSTANDARD2_0
-            return await InputStream.ReadAsync(buffer, offset, length, cancellationToken);
-#else
-            return await InputStream.ReadAsync(new Memory<byte>(buffer, offset, length), cancellationToken);
-#endif
+            // The ReadAsync method should not be used since it does not check the ReceiveTimeout property.
+            return await Task.Run( () => InputStream.Read( buffer, offset, length ), cancellationToken );
         }
 
         public override async Task WriteAsync(byte[] buffer, int offset, int length, CancellationToken cancellationToken)
@@ -95,11 +92,8 @@
                     "Cannot write to null outputstream");
             }
 
-#if NETSTANDARD2_0
-            await OutputStream.WriteAsync(buffer, offset, length, cancellationToken);
-#else
-            await OutputStream.WriteAsync(buffer.AsMemory(offset, length), cancellationToken);
-#endif
+            // The WriteAsync method should not be used since it does not check the SendTimeout property.
+            await Task.Run( () => OutputStream.Write( buffer, offset, length ), cancellationToken );
         }
 
         public override async Task FlushAsync(CancellationToken cancellationToken)