public async Task MultiplexGet(string scheme) { var requestsReceived = 0; var requestCount = 10; var allRequestsReceived = new TaskCompletionSource <int>(TaskCreationOptions.RunContinuationsAsynchronously); var hostBuilder = new HostBuilder() .ConfigureWebHost(webHostBuilder => { ConfigureKestrel(webHostBuilder, scheme); webHostBuilder.ConfigureServices(AddTestLogging) .Configure(app => app.Run(async context => { if (Interlocked.Increment(ref requestsReceived) == requestCount) { allRequestsReceived.SetResult(0); } await allRequestsReceived.Task; var content = new BulkContent(); await content.CopyToAsync(context.Response.Body).DefaultTimeout(); })); }); using var host = await hostBuilder.StartAsync().DefaultTimeout(); var url = host.MakeUrl(scheme); using var client = CreateClient(); var requestTasks = new List <Task>(requestCount); for (var i = 0; i < requestCount; i++) { requestTasks.Add(RunRequest(url)); } async Task RunRequest(string url) { using var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead).DefaultTimeout(); Assert.Equal(HttpVersion.Version20, response.Version); await BulkContent.VerifyContent(await response.Content.ReadAsStreamAsync()).DefaultTimeout(); }; await Task.WhenAll(requestTasks); await host.StopAsync().DefaultTimeout(); }