Eu tenho uma situação em que estou fazendo uma async
chamada para um método que retorna e IDisposable
instância. Por exemplo:
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"));
Agora, antes de entrar em async
cena, ao trabalhar com uma IDisposable
instância, essa chamada e o código que usava a variável "resposta" seriam envolvidos em uma instrução using.
Minha pergunta é se essa ainda é a abordagem correta quando a async
palavra-chave é incluída no mix? Mesmo que o código seja compilado, a instrução using ainda funcionará conforme o esperado em ambos os exemplos abaixo?
Exemplo 1
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
// Do something with the response
return true;
}
Exemplo 2
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
await this.responseLogger.LogResponseAsync(response);
return true;
}
fonte
using(){...}
bloco ou é um exagero ou pode degradar o desempenho em alguns casos? Temusing(){...}
o mesmo propósito queawait
?using
eawait
servem a propósitos totalmente diferentes. Observe que o C # 8 agora também tem descarte assíncrono. Embora valha a pena estar ciente do problema de segmentação que minha resposta destaca, isso definitivamente não significa que seja errado misturarusing
eawait
.