在Visual Studio 11开发人员预览版中,异步操作方法正常运行而没有问题。安装Visual Studio 11 Beta后,这些相同的异步操作方法现在会导致页面无限期挂起。
public class HomeController : AsyncController {
public async Task<ActionResult> Index() {
return View();
}
}
将操作更改回同步,无需挂起即可正常工作。
public class HomeController : Controller {
public ActionResult Index() {
return View();
}
}
这篇博客文章(http://blogs.msdn.com/b/pfxteam/archive/2012/03/03/10277166.aspx)让我觉得这个问题与测试版有关,但网站已经建成针对.NET Framework 4.5而不是4.0,所以可能它应该可行。
“这意味着虽然您绝对可以使用Visual Studio 11 Beta构建使用async / await与.NET 4.5的应用程序,但您目前无法使用Visual Studio 11 Beta构建对.NET使用async / await的应用程序4,Silverlight 5等,因为Visual Studio 11 Beta中的编译器期望形状不同于现有AsyncCtpLibrary * DLL中的类型。“
有关在何处寻找修复的任何建议?
答案 0 :(得分:3)
Stephen Troub随后提供了解决方法。你可以看到他的帖子here。总结:
.NET 4.5 Beta中的ASP.NET MVC中存在一个已知错误 在此问题中,异步方法同步完成。直到 修复是可用的,一个简单的解决方法是添加“await Task.Yield();” 作为异步方法的第一行,强制它完成 异步。为了使其正常工作,您还需要确保 您正在使用ASP.NET提供的新SynchronizationContext .NET 4.5,这意味着确保您拥有以下行:
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
在配置文件的appSettings部分。