Асинхронный метод, вызываемый в веб-интерфейсе API с помощью async, зависает и не возвращается вызывающей стороне. - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу вызвать Web API через C # Task, но я не могу получить возвращенный результат, хотя он переходит на URL, который я указал, чтобы получить значения.

Реализовать ли яневерный метод асинхронизации и ожидания?

Ниже приведен мой код:

  • Веб-API с префиксом маршрута:

    [RoutePrefix("api/values")]
    
  • Метод, описанный ниже в веб-API:

    [Route("Developer")]
    [HttpGet]
    public Task<List<string>> Developer()
    {
        var developer = new List<string> { "Developer", "Developer" };
    
        return Task.FromResult(developer);
    }
    
  • Контроллер

    private async Task<List<string>> Developer()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:52717/");
    
            var response = await client.GetAsync("api/values/Developer");
    
            if (response.IsSuccessStatusCode)
                return new List<string>();
    
            throw new Exception("Unable to get the values");
        }
    }
    
    public ActionResult Index()
    {
        Task.WaitAll(Developer());
    
        return View();
    }
    

Каждый раз, когда я запускаю браузер, онидет в Index () и переходит к Developer (), однако он застревает и загружается до тех пор, пока не будет вызван var response = await client.GetAsync("api/values/Developer"), и не пройдёт весь путь до return Task.FromResult(developer);, и он не остановится и не загрузитсяполностью.

Кто-нибудь знает, как заставить веб-API возвращаться к вызывающей стороне?

Любая помощь будет высоко ценится.

Спасибо

1 Ответ

4 голосов
/ 09 апреля 2019

Не блокировать код async;использовать async полностью :

public async Task<ActionResult> Index()
{
  await Developer();

  return View();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...