У меня есть ситуация, когда я async
вызываю метод, который возвращает и IDisposable
экземпляр. Например:
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"));
До async
этого при работе с IDisposable
экземпляром этот вызов и код, который использовал переменную «response», были бы заключены в оператор using.
Мой вопрос в том, является ли это все еще правильным подходом, когда async
в смесь добавляется ключевое слово? Несмотря на то, что код компилируется, будет ли оператор using работать должным образом в обоих приведенных ниже примерах?
Пример 1
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
// Do something with the response
return true;
}
Пример 2
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
await this.responseLogger.LogResponseAsync(response);
return true;
}
источник
using(){...}
блока, или это будет излишним или в некоторых случаях может снизить производительность? Служитusing(){...}
той же цели, что иawait
?using
иawait
служат совершенно другим целям. Обратите внимание, что C # 8 теперь также имеет асинхронное удаление. Хотя это стоит быть в курсе вопроса заправочной мой ответ подчеркивает, что , безусловно , не означает , что это неправильно смешиватьusing
иawait
.