在创建、使用和处理多个HttpClient时,我注意到有一些套接字处于TIME_WAIT状态而没有关闭。
例如,在运行以下命令后:
using System.Net.Http;
namespace HttpClientTest
{
public class Program
{
public static void Main(string[] args)
{
for (var i = 0; i < 10; i++)
{
using (var httpClient = new HttpClient())
{
var result = httpClient.
GetAsync("http://stackoverflow.com/").
Result;
}
}
}
}
}
我注意到使用netstat命令时,有些套接字未关闭:
TCP 10.200.60.168:2722 151.101.193.69:http TIME_WAIT
TCP 10.200.60.168:2751 151.101.193.69:http TIME_WAIT
TCP 10.200.60.168:2752 151.101.193.69:http TIME_WAIT
TCP 10.200.60.168:2753 151.101.193.69:http TIME_WAIT
TCP 10.200.60.168:2754 151.101.193.69:http TIME_WAIT
TCP 10.200.60.168:2755 151.101.193.69:http TIME_WAIT
TCP 10.200.60.168:2756 151.101.193.69:http TIME_WAIT
TCP 10.200.60.168:2757 151.101.193.69:http TIME_WAIT
TCP 10.200.60.168:2758 151.101.193.69:http TIME_WAIT
TCP 10.200.60.168:2759 151.101.193.69:http TIME_WAIT
这是预期的行为吗?我需要明确设置Connection头的值为close来防止这种情况发生吗?
httpClient.
DefaultRequestHeaders.
Connection.
Add("close");