C#中的异步调用没有返回结果

时间:2015-02-07 18:15:49

标签: c# asp.net-mvc asp.net-web-api async-await

我有一个ASP.NET MVC站点和一个Web API。 在MVC站点的控制器操作中,我做了:

public ActionResult ActionAsync()
{
    string result = MakeAsyncRequest().Result;
    return View("Index", (object)result);
}

MakeAsyncRequest()如下:

private async Task<string> MakeAsyncRequest()
{
    using (var client = new HttpClient())
    {
        Task<string> response = client.GetStringAsync("http://localhost:55286/api/Home");
        DoSomething();
        return await response;
    }
}

当我调试时,我看到正在执行的DoSomething()(它只是一个空白),也调用了WebAPI并返回一个字符串,但是MakeAsyncRequest的返回不会发生,浏览器会无限期地等待服务器归还。

这是为什么?与客户端是ASP.NET MVC站点有什么关系?

1 个答案:

答案 0 :(得分:6)

.Result

这是一个classic ASP.NET deadlock.不要阻止。或者,不要使用async / await,但你的情况似乎很合适。也可以使动作异步。