O / async / wait é adequado para métodos que estão vinculados a E / S e à CPU?

A documentação do MSDN parece indicar queasync eawait são adequados para tarefas ligadas a IO, enquantoTask.Run deve ser usado para tarefas ligadas à CPU.

Eu estou trabalhando em um aplicativo que executa solicitações HTTP para recuperar documentos HTML, que analisa então. Eu tenho um método que se parece com isso:

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
}

Este uso é bom e adequado deasync eawaitou estou usando demais?

questionAnswers(3)

yourAnswerToTheQuestion