MVC4“Can not await”
问题描述:
下面的代码片段导致了我很难理解的编译错误。MVC4“Can not await”
错误1不能等待System.Collections.Generic.List '<BusinessLogic.News>'
有什么建议?
public class NewsController : Controller
{
public async Task<ActionResult> Index(int page=1)
{
NewsNavigator News = new NewsNavigator();
await News.Load(page);
...
return View(News);
}
}
public List<News> Load(int page = DefaultPage, int pageSize = DefaultPageSize, string filter = DefaultFilter)
{
//DBLayer_News
...
return LoadedNews;
}
答
Await应用于返回任务的方法调用的结果。
因为新闻不是任务,所以不能在新闻中称呼它。创建一个任务并将其News.Load方法传递给它。
NewsNavigator News = new NewsNavigator();
var newsLoadTask = Task.Factory.StartNew(() => News.Load(page));
await newsLoadTask;
...
是否有更简单的语法?在C#5.0和mvc4中 – RouR 2012-04-28 05:44:10
嗯,我不确定...你可以让NewsNavigator类是静态的并摆脱第一行? – c0deNinja 2012-04-28 22:39:10
您可以随时使用'await Task.Run((=)=> News.Load(page));' 此外,请确保任何使用者都包含返回类型的dll。当不包含dll时,Visual Studio 2012提供了一个无用的错误消息“无法等待”。 – 2013-02-24 21:39:47