使用异步调用Web api的异步方法被卡住,并且没有返回给调用者

时间:2019-04-08 14:56:36

标签: c# multithreading asp.net-web-api

我想通过C#Task调用Web API,但是我无法获得返回的结果,尽管它确实跳到了我指出的获取值的URL。

我会错误地实现async and await方法吗?

下面是我的代码:

  • Web API,其路由前缀为:

    [RoutePrefix("api/values")]
    
  • Web 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);的方式,并且一直卡住并一直加载。

任何人都知道如何使Web API返回调用方吗?

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:4)

请勿阻止async代码;使用async all the way

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

  return View();
}