asp.net mvc 4异步控制器挂在无TaskAsync方法上

时间:2012-05-09 22:20:04

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

我正在使用带有4.5 Beta的Visual Studio 2011 Beta。 ASP.Net MVC 4似乎存在一个错误,如果该方法返回无“TaskAsync”任务,它会挂起请求。

public class HomeController : Controller
{
    //
    // GET: /Home/

    public async Task<ActionResult> Test1()
    {
        string s = await new WebClient().DownloadStringTaskAsync("http://google.com");
        return Content("asdf");
    }

    public async Task<ActionResult> Test2()
    {
        string MyConString = ConfigurationManager.ConnectionStrings["Master"].ConnectionString;
        MySqlConnection connection = new MySqlConnection(MyConString);
        await connection.OpenAsync();
        connection.Close();
        return Content("asdf");
    }
}

Test1工作正常。 一旦方法返回,Test2就会挂起。我能够通过代码进行调试而没有错误。

任何人都知道修复/解决方法吗?

1 个答案:

答案 0 :(得分:4)

Known issue with MVC 4 Beta.

简而言之,将以下内容添加到〜/ Web.config:

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

然后添加await Task.Yield();作为操作方法的第一行。 (别忘了等待!)