1

我正在使用带有 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 就会挂起。我能够毫无错误地通过代码进行调试。

有谁知道这个的修复/解决方法?

4

1 回答 1

4

MVC 4 Beta 的已知问题。

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

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

然后await Task.Yield();在您的操作方法中添加为第一行。(不要忘记等待!)

于 2012-05-10T03:16:10.817 回答