Podczas tworzenia, używania i usuwania kilku HttpClients zauważam, że w statusie TIME_WAIT są otwarte gniazda.Dlaczego HttpClient pozostawia gniazda otwarte?
Na przykład po uruchomieniu następuje:
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;
}
}
}
}
}
zauważam z netstat, że gniazda są otwarte:
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
Jest to oczekiwane zachowanie? Czy muszę jawnie ustawić wartość nagłówka połączenia, aby ją zamknąć, aby temu zapobiec?
httpClient.
DefaultRequestHeaders.
Connection.
Add("close");
Widziałeś to ?: http://stackoverflow.com/questions/4306372/preventing-time-wait-using-net-async-api – Brandon
Może to być optymalizacja w przypadku, gdy potrzebujesz dodatkowych próśb do serwer. –
Możliwy duplikat [W jaki sposób zapobiec wyczerpaniu gniazda/portu?] (Http://stackoverflow.com/questions/11569441/how-do-i-prevent-socket-port-exhaustion) – Igor