¿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?