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

Dan*_*nte 2 c# asp.net-mvc async-await asp.net-web-api

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

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

usr*_*usr 6

.Result

这是一个典型的ASP.NET死锁.不要阻止.或者,不要使用async/await,但你的情况似乎很合适.使动作也异步.