我有一个有两个路径的搜索操作,一个同步路径,刚刚返回一个简单的视图,以及异步路径,它异步地搜索,然后返回视图。两者都得到了请求,因此它们是相同行动的一部分。

问题是,当我访问动作“localhost:xxxx / home / search”时,页面只是无限加载。使用Fiddler,我可以看到请求永远不会返回。我调试它并使其到最后一行代码,但是,再次,请求不完整。

我简化了以下重复:

public async Task<ActionResult> Search() 
{ 
    return View(); 
} 
.

vs11警告我,代码将同步运行,没有等待,这很好,但请求未完成。

应该这项工作吗?或者我需要在这里做别的什么吗?

编辑

这是MVC 4定位.NET 4.5。

编辑2

对于那些在代码中看到的东西的人,这就是我在异步动作中需要同步的原因:

public async Task<ActionResult> Search(string query = null)
{
    if (string.IsNullOrWhiteSpace(query))
        return View(new SearchViewModel());   // never loads

    var model = await _someService.SearchAsync(query);
    return View(model);    // loads
}
.

有帮助吗?

解决方案

这是测试版中的已知错误。 quote stephen toub:

简短的答案是,在.NET 4.5 Beta中存在ASP.NET MVC中的已知错误,当ASYNC方法同步完成时,在此问题中导致此问题。在修复之前,简单的解决方法是添加“等待任务”();“作为Async方法的第一行,强制它以异步完成。为此,您还需要确保在.NET 4.5中使用ASP.NET提供的新同步Context,这意味着确保您有线:

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

在配置文件的AppSettings部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top