using System.Threading.Tasks;
using System.Net.Sockets;
using System.Text.Encodings;
public static async Task Main()
var ipAddress = "1.1.1.1";
var client = new TcpClient(ipAddress, port);
var stream = client.GetStream();
await stream.WriteAsync(Encoding.UTF8.GetBytes("GET / HTTP/1.1\r\nHost: {ipAddress}\r\nConnection: close\r\n\r\n"));
var buffers = Enumerable.Range(0, 16).Select(_ => new byte[4096]);
var reset = new AsyncManualResetEvent(false);
var task = buffers.Select(buffer => ReadAsync(reset, stream, buffer)).WhenAll().ContinueWith(task => task.Result.ToList());
var lengths = await task;
foreach (var length in lengths)
Console.WriteLine($"length: {length}");
public static async Task<int> ReadAsync(AsyncManualResetEvent reset, Stream stream, Memory<byte> buffer)
return await stream.ReadAsync(buffer);