Dns.BeginGetHost… métodos bloqueando

Así que quiero hacer unmucho de consultas de DNS.

Creo (miles) de tareas desde elBegin/EndGetHostEntry par asíncrono:

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

entoncesTask.WaitAll para que todo se complete. Estoy viendo el numero deThreadPool subprocesos aumentan drásticamente en respuesta a mis solicitudes. Si fuerzo elThreadPool minThreads a 500, la carga de trabajo se consume considerablemente más rápido. Todo esto apunta a bloquear en elDns Implementación asíncrona.

Si sustituyoDns con uncliente Dns gestionado, Puedo consumir la misma carga de trabajo con solo 1 o 2 subprocesos en elThreadPool con cpu prácticamente inactivo.

La cosa es, laDns la implementación es absolutamente esencial para muchas API de red (HttpWebRequest, WebClient, HttpClient), y todos parecen estar afectados por este problema. Si resuelvo DNS con una biblioteca de terceros, y hago solicitudes HTTP utilizando la dirección IP como host en el uri, modifico laHost Encabezado para arreglar la solicitud, obtengo un rendimiento increíble en comparación con cualquier cosa que involucreSystem.Net.Dns.

¿Que está pasando aqui? ¿Me he perdido algo o es elSystem.Net.Dns ¿Realmente la implementación es tan mala?

Respuestas a la pregunta(4)

Su respuesta a la pregunta