我有一个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站点有什么关系?
答案 0 :(得分:6)
.Result
这是一个classic ASP.NET deadlock.不要阻止。或者,不要使用async / await,但你的情况似乎很合适。也可以使动作异步。