Dns.BeginGetHost… blokowanie metod

Więc chcę zrobićlos zapytań DNS.

Tworzę (tysiące) zadań zBegin/EndGetHostEntry asynchroniczna para:

var lookupTask = Task.Factory.FromAsync
   ( Dns.BeginGetHostEntry,
     (Func<IAsyncResult, IPHostEntry>) Dns.EndGetHostEntry,
     "google.com", 
     null
   )

następnieTask.WaitAll aby wszystko się zakończyło. Widzę liczbęThreadPool wątki drastycznie rosną w odpowiedzi na moje prośby. Jeśli wymuszęThreadPool minThreads do 500, obciążenie jest zużywane znacznie szybciej. Wszystko to wskazuje na blokowanie wDns implementacja asynchroniczna.

Jeśli wymienięDns zzarządzany klient Dns, Mogę zużyć to samo obciążenie z tylko 1 lub 2 wątkami wThreadPool z cpu praktycznie na biegu jałowym.

Rzecz w tym, żeDns implementacja jest całkowicie rdzeniem wielu sieciowych interfejsów API (HttpWebRequest, WebClient, HttpClient) i wydaje się, że problem ten dotyczy wszystkich. Jeśli rozwiążę DNS za pomocą biblioteki innej firmy i wykonam żądania HTTP przy użyciu adresu IP jako hosta w uri, zmieńHost nagłówek, aby naprawić żądanie, dostaję niesamowitą wydajność w porównaniu do czegokolwiekSystem.Net.Dns.

Co tu się dzieje? Czy coś przeoczyłem lub jestSystem.Net.Dns wdrożenie naprawdę tak źle?

questionAnswers(4)

yourAnswerToTheQuestion