【问题标题】:How to stop Visual Studio 11 Beta async action methods from hanging如何阻止 Visual Studio 11 Beta 异步操作方法挂起
【发布时间】:2012-03-05 00:13:45
【问题描述】:

在 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 来构建使用 .NET 4.5 的 async/await 的应用程序,但您目前无法使用 Visual Studio 11 Beta 来构建使用 async/await 来对抗 .NET 的应用程序4、Silverlight 5 等,因为 Visual Studio 11 Beta 中的编译器期望的类型与现有 AsyncCtpLibrary* DLL 中的类型不同。”

关于在哪里寻找修复的任何建议?

【问题讨论】:

  • SO 上有一些 MS 人员,但 Async 团队主要在 official forum 上闲逛。我建议在那里问。
  • 我在那里交叉发布。感谢您的提示。

标签: visual-studio asynchronous visual-studio-2012


【解决方案1】:

来自 Microsoft 的Stephen Troub 跟进并提供了解决方法。你可以看到他的帖子here。总结:

.NET 4.5 Beta 中的 ASP.NET MVC 中存在一个已知错误,导致 在这个问题中,异步方法同步完成。直到一个 修复可用,一个简单的解决方法是添加“await Task.Yield();” 作为 async 方法的第一行,强制它完成 异步。为了使其正常工作,您还需要确保 您正在使用 ASP.NET 提供的新 SynchronizationContext .NET 4.5,这意味着确保你有这条线:

<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />

在配置文件的 appSettings 部分中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多