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&nbsp;para que todo se complete. Estoy viendo el numero deThreadPool&nbsp;subprocesos aumentan drásticamente en respuesta a mis solicitudes. Si fuerzo elThreadPool minThreads&nbsp;a 500, la carga de trabajo se consume considerablemente más rápido. Todo esto apunta a bloquear en elDns&nbsp;Implementación asíncrona.

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

La cosa es, laDns&nbsp;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&nbsp;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&nbsp;¿Realmente la implementación es tan mala?