Я вызываю внешнюю службу с использованием HttpClient из проекта ASP.Net MVC 4 Web Api, работающего на .Net Framework 4.5
Пример кода выглядит следующим образом (игнорируйте возвращаемые значения, так как это пример кода для проверки вызова внешней службы):
public class ValuesController : ApiController
{
static string _address = "http://api.worldbank.org/countries?format=json";
private string result;
// GET api/values
public IEnumerable<string> Get()
{
GetResponse();
return new string[] { result, "value2" };
}
private async void GetResponse()
{
var client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(_address);
response.EnsureSuccessStatusCode();
result = await response.Content.ReadAsStringAsync();
}
}
Хотя код в частном методе действительно работает, проблема заключается в том, что контроллер Get() вызывает GetResponse(), но он не ожидает результата, но вместо этого сразу же возвращает результат с результатом = null.
Я также попытался использовать более простой синхронный вызов с WebClient следующим образом:
// GET api/values
public IEnumerable<string> Get()
{
//GetResponse();
var client = new WebClient();
result = client.DownloadString(_address);
return new string[] { result, "value2" };
}
который отлично работает.
Что я делаю неправильно? Почему Get() не ждет завершения частного метода в асинхронном образце?