Tengo una situación en la que hago una asyncllamada a un método que devuelve una IDisposableinstancia. Por ejemplo:
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"));Ahora, antes asyncestaba en escena, cuando se trabaja con una IDisposableinstancia, esta llamada y el código que usa la variable "respuesta" se envuelve en una declaración de uso.
Mi pregunta es si ese sigue siendo el enfoque correcto cuando la asyncpalabra clave se agrega a la mezcla. Aunque el código se compile, ¿seguirá funcionando la instrucción using como se esperaba en los dos ejemplos siguientes?
Ejemplo 1
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
    // Do something with the response
    return true;
}Ejemplo 2
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
    await this.responseLogger.LogResponseAsync(response);
    return true;
}fuente

using(){...}bloque o es una exageración o puede degradar el rendimiento en algunos casos? ¿Tieneusing(){...}el mismo propósito queawait?usingyawaitsirven para propósitos completamente diferentes. Tenga en cuenta que C # 8 ahora también tiene eliminación asincrónica. Si bien vale la pena estar al tanto del problema de subprocesos que destaca mi respuesta, eso definitivamente no significa que esté mal mezclarusingyawait.