J'ai une situation où je fais un async
appel à une méthode qui retourne et IDisposable
instance. Par exemple:
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"));
Maintenant, avant async
était sur la scène, lorsque vous travaillez avec une IDisposable
instance, cet appel et le code qui utilisait la variable "response" seraient enveloppés dans une instruction using.
Ma question est de savoir si c'est toujours la bonne approche lorsque le async
mot-clé est jeté dans le mélange? Même si le code se compile, l'instruction using fonctionnera-t-elle toujours comme prévu dans les deux exemples ci-dessous?
Exemple 1
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
// Do something with the response
return true;
}
Exemple 2
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
await this.responseLogger.LogResponseAsync(response);
return true;
}
la source
using(){...}
bloc ou c'est exagéré ou peut-il dégrader les performances dans certains cas? A-t-ilusing(){...}
le même objectif queawait
?using
etawait
servent des objectifs totalement différents. Notez que C # 8 dispose désormais également d'une élimination asynchrone. Même s'il vaut la peine d'être conscient du problème de filetage que ma réponse met en évidence, cela ne signifie certainement pas qu'il est mal de mélangerusing
etawait
.