Mam sytuację, w której wykonuję async
wywołanie metody, która zwraca i IDisposable
wystąpienie. Na przykład:
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"));
Wcześniej async
było na scenie podczas pracy z IDisposable
instancją, to wywołanie i kod używający zmiennej „response” byłyby opakowane w instrukcję using.
Moje pytanie brzmi, czy nadal jest to właściwe podejście, gdy async
słowo kluczowe jest wrzucane do miksu? Nawet jeśli kod jest kompilowany, czy instrukcja using nadal będzie działać zgodnie z oczekiwaniami w obu poniższych przykładach?
Przykład 1
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
// Do something with the response
return true;
}
Przykład 2
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
await this.responseLogger.LogResponseAsync(response);
return true;
}
źródło
using(){...}
bloku, czy jest to przesada lub może w niektórych przypadkach obniżyć wydajność? Czyusing(){...}
służy temu samemu celowiawait
?using
iawait
służą do zupełnie innych celów. Zauważ, że C # 8 ma teraz również asynchroniczne usuwanie. Chociaż to warto być świadomi kwestii gwintowania Moja odpowiedź podkreśla, że na pewno nie znaczy, że to nie tak , aby wymieszaćusing
iawait
.