Dns.BeginGetHost… métodos de bloqueio

Então eu quero fazer umamuito de consultas DNS.

Eu crio (milhares) de tarefas doBegin/EndGetHostEntry par assíncrono:

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

entãoTask.WaitAll&nbsp;para tudo completar. Estou vendo o número deThreadPool&nbsp;threads aumentam drasticamente em resposta aos meus pedidos. Se eu forçar oThreadPool minThreads&nbsp;para 500, a carga de trabalho é consumida consideravelmente mais rapidamente. Tudo isso aponta para o bloqueio noDns&nbsp;implementação assíncrona.

Se eu substituirDns&nbsp;com umcliente de DNS gerenciadoPosso consumir a mesma carga de trabalho com apenas 1 ou 2 threads noThreadPool&nbsp;com cpu virtualmente inativo.

A coisa é, oDns&nbsp;A implementação é absolutamente fundamental para muitas APIs de rede (HttpWebRequest, WebClient, HttpClient), e todos parecem ser afetados por esta questão. Se eu resolver o DNS com uma biblioteca de terceiros e fizer solicitações HTTP usando o endereço IP como o host no uri, altere oHost&nbsp;cabeçalho para corrigir o pedido, eu fico empolgado desempenho em comparação com qualquer coisa que envolvaSystem.Net.Dns.

Oque esta acontecendo aqui? Eu perdi alguma coisa ou é oSystem.Net.Dns&nbsp;implementação realmente tão ruim assim?