2012-04-28 79 views
4

下面的代码片段导致了我很难理解的编译错误。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; 
    } 

回答

7

Await应用于返回任务的方法调用的结果。

因为新闻不是任务,所以不能在新闻中称呼它。创建一个任务并将其News.Load方法传递给它。

NewsNavigator News = new NewsNavigator(); 
var newsLoadTask = Task.Factory.StartNew(() => News.Load(page)); 
await newsLoadTask; 
... 
+0

是否有更简单的语法?在C#5.0和mvc4中 – RouR 2012-04-28 05:44:10

+0

嗯,我不确定...你可以让NewsNavigator类是静态的并摆脱第一行? – c0deNinja 2012-04-28 22:39:10

+3

您可以随时使用'await Task.Run((=)=> News.Load(page));' 此外,请确保任何使用者都包含返回类型的dll。当不包含dll时,Visual Studio 2012提供了一个无用的错误消息“无法等待<数据类型名称>”。 – 2013-02-24 21:39:47