下面是我在Asp上运行的一段代码.net 4.7.2和.Net内核,但每个框架都有不同的行为
public class Program
{
private HttpClient Client = new HttpClient();
public static async Task Main(string[] args)
{
Program example = new Program();
Console.WriteLine("Starting connections");
int numberofIterations = 10;
Task<HttpResponseMessage>[] awaitableTasks = new Task<HttpResponseMessage>[numberofIterations];
for (int i = 0; i < numberofIterations; i++)
{
var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.RequestUri = new Uri("https://example.com");
httpRequestMessage.Method = new HttpMethod("GET");
awaitableTasks[i] = example.Client.SendAsync(httpRequestMessage);
//Console.WriteLine(result.StatusCode);
}
Console.WriteLine("Connections done");
await Task.WhenAll(awaitableTasks);
}
}
用这个.Net核心框架,网络跟踪 for each 请求显示一个单独的tcp连接,同时使用ASP.NEt 4.7.2框架套接字得到重用.
Network Trace .Net Core
Network Trace Asp.Net 4.7.2
欣赏你的 idea ,理解差异,解释这种行为,以及克服这个问题的最佳方法.