¿Es async / await adecuado para métodos que están vinculados tanto a IO como a CPU?

La documentación de MSDN parece indicar queasync yawait son adecuados para tareas ligadas a IO mientras queTask.Run debe ser utilizado para tareas vinculadas a la CPU.

Estoy trabajando en una aplicación que realiza solicitudes HTTP para recuperar documentos HTML, que luego analiza. Tengo un método que se parece a esto:

public async Task<HtmlDocument> LoadPage(Uri address)
{
    using (var httpResponse = await new HttpClient().GetAsync(address)) //IO-bound
    using (var responseContent = httpResponse.Content)
    using (var contentStream = await responseContent.ReadAsStreamAsync())
        return await Task.Run(() => LoadHtmlDocument(contentStream)); //CPU-bound
}

¿Es este uso bueno y adecuado deasync yawait, o lo estoy usando en exceso?

Respuestas a la pregunta(3)

Su respuesta a la pregunta