Асинхронные методы возвращают Task
объектов.В среде IDE правильно сказано, что Task
не содержит определения для Content
.
Вам следует await
выполнить задачи, изменив свой код так:
var response = await client.GetAsync($"/data/2.5/weather?q=London,UK&appid=c44d8aa0c5e588db11ac6191c0bc6a60&units=metric");
var stringResult = await response.Content.ReadAsStringAsync();
Await
будет ожидать завершения задачи (важно) и распаковать результат (т.е. развернуть его из объекта Task
).
Далее, ваша проблема в том, что static void Main()
неasync
метод, поэтому ключевое слово await
недопустимо.Это можно решить, выполнив следующие действия:
- В обозревателе решений щелкните правой кнопкой мыши свой проект и выберите «Изменить NAME.csproj»
- Найдите что-то похожее на
<TargetFramework>netcoreapp2.1</TargetFramework>
- Под этой строкой добавьте
<LangVersion>7.1</LangVersion>
- это заставит VS и компилятор проверить ваш код / скомпилировать ваш код в соответствии с правилами C # 7.1 ( самая ранняя языковая версия, в которой были добавлены асинхронные методы Main ). - Измените
Main()
подпись на static async Task Main()
Окончательный код:
static async Task Main()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://api.openweathermap.org");
var response = await client.GetAsync($"/data/2.5/weather?q=London,UK&appid=c44d8aa0c5e588db11ac6191c0bc6a60&units=metric");
// This line gives me error
var stringResult = await response.Content.ReadAsStringAsync();
}